我希望在我的项目中有一个“manifest.json”文件,其中包含项目所依赖的.cs和.dll文件列表,但不属于项目的一部分。要在构建时编译这些文件,我需要告诉Visual Studio将这些源文件和程序集包含在构建过程中。
我有没有办法在预制活动中做到这一点?
答案 0 :(得分: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文件导入到您希望使用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>
我对此也很陌生,所以随时改进这个;)
答案 1 :(得分:1)
你应该使用VisualStudio宏:
http://msdn.microsoft.com/en-us/library/b4c73967(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/8h31zbch.aspx
Macros IDE包含一个类似于您要实现的示例:
AddDirAsSlnFolder - 将磁盘上的文件夹导入解决方案文件夹结构。
------ -----更新
我刚刚发现Vs2012已删除宏功能....