2013-02-06 15 views
3

我想在我的項目中包含一個「manifest.json」文件,該文件包含項目依賴的.cs和.dll文件列表,但不是項目。爲了在構建時編譯這些文件,我需要以某種方式告訴Visual Studio將這些源文件和程序集包含到構建過程中。在預編譯事件中添加源文件和程序集引用

有沒有一種方法可以在預構建事件中做到這一點?

+0

你爲什麼不把這些文件中的另一個項目。 – giammin

+0

@giammin因爲依賴於另一個項目意味着取決於它們的結果彙編。我想直接依賴源文件,這些文件被編譯到我的可執行文件中。 –

+1

你爲什麼不在項目中包含這些文件? – giammin

回答

2

我做了一個自定義的ITaskItem現在,增加了構建過程之前的文件。

下面是我已經做到了:

1)創建自定義ITaskItem

public class AddSourceFiles : Task 
{ 
    private ITaskItem[] output = null; 

    [Output] 
    public ITaskItem[] Output 
    { 
     get 
     { 
      return output; 
     } 
    } 

    public override bool Execute() 
    { 
     //gather a list of files to add: 
     List<string> filepaths = new List<string>() { "a.cs", "b.cs", "d.cs" }; 

     //convert the list to a itaskitem array and set it as output 
     output = new ITaskItem[filepaths.Count]; 
     int pos = 0; 
     foreach (string filepath in filepaths) 
     { 
      output[pos++] = new TaskItem(filepath); 
     } 
    } 
} 

2)創建一個* .targets文件,例如 「AddSourceFiles.targets」:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask AssemblyFile="AddSourceFiles.dll" TaskName="AddSourceFiles" /> 
    <PropertyGroup> 
     <BuildDependsOn> 
      AddSourceFiles; 
      $(BuildDependsOn); 
     </BuildDependsOn> 
    </PropertyGroup> 
    <Target Name="AddSourceFiles"> 
     <AddSourceFiles> 
      <Output TaskParameter="Output" ItemName="Compile" /> 
     </AddSourceFiles> 
    </Target> 
</Project> 

正如您所看到的,類「AddSourceFiles」的結果DLL在任務文件中被引用。

3)最後一步是將這個.targets文件導入到每個.csproj文件中,您希望使用AddSourceFiles類包含文件。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    . 
    . 
    <Import Project="c:\path\to\AddSourceFiles.targets" /> 
    . 
    . 
</Project> 

我也很新,可以隨意提高這一個;)

1

你應該使用VisualStudio的宏:

http://msdn.microsoft.com/en-us/library/b4c73967(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/8h31zbch.aspx

宏IDE包含一個例子,它類似於你想達到什麼目的:

AddDirAsSlnFolder - 導入一個文件夾在磁盤上成解決方案文件夾結構。

------ -----更新

我剛剛發現,Vs2012具有去除宏功能....

+0

我可以在哪裏下載宏IDE?微軟網站不想讓我知道:/ ..是否有可能使用C#做到這一點? –

+0

我也很討厭vb。當我必須創建宏時,我在c#中創建一個dll,然後用vb調用它。從visualstudio打開宏IDE Alt + F11。如果你想避免宏,也許Visual Studio自動化模型可以滿足你的需求。 – giammin

+0

我已經找到了一種方法來處理自定義ITaskItem,但我仍然對使用宏或Visual Studio自動化的解決方案感興趣。你可以提供一個非常基本的例子來說明如何做到這一點? –

相關問題