我希望在我的项目中有一个"manifest.json"文件,其中包含项目依赖的.cs和.dll文件列表,但这些文件不是项目的一部分。为了在构建过程中编译这些文件,我需要告诉Visual Studio将这些源文件和程序集包含到构建过程中。
是否可以在预构建事件中完成此操作?
是否可以在预构建事件中完成此操作?
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) 创建一个名为“AddSourceFiles.targets”的*.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”文件导入到每个要使用您的AddSourceFiles类包含文件的“.csproj”文件中。
<?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 已经删除了宏功能....