我想在我的項目中包含一個「manifest.json」文件,該文件包含項目依賴的.cs和.dll文件列表,但不是項目。爲了在構建時編譯這些文件,我需要以某種方式告訴Visual Studio將這些源文件和程序集包含到構建過程中。在預編譯事件中添加源文件和程序集引用
有沒有一種方法可以在預構建事件中做到這一點?
我想在我的項目中包含一個「manifest.json」文件,該文件包含項目依賴的.cs和.dll文件列表,但不是項目。爲了在構建時編譯這些文件,我需要以某種方式告訴Visual Studio將這些源文件和程序集包含到構建過程中。在預編譯事件中添加源文件和程序集引用
有沒有一種方法可以在預構建事件中做到這一點?
我做了一個自定義的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>
我也很新,可以隨意提高這一個;)
你應該使用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具有去除宏功能....
我可以在哪裏下載宏IDE?微軟網站不想讓我知道:/ ..是否有可能使用C#做到這一點? –
我也很討厭vb。當我必須創建宏時,我在c#中創建一個dll,然後用vb調用它。從visualstudio打開宏IDE Alt + F11。如果你想避免宏,也許Visual Studio自動化模型可以滿足你的需求。 – giammin
我已經找到了一種方法來處理自定義ITaskItem,但我仍然對使用宏或Visual Studio自動化的解決方案感興趣。你可以提供一個非常基本的例子來說明如何做到這一點? –
你爲什麼不把這些文件中的另一個項目。 – giammin
@giammin因爲依賴於另一個項目意味着取決於它們的結果彙編。我想直接依賴源文件,這些文件被編譯到我的可執行文件中。 –
你爲什麼不在項目中包含這些文件? – giammin