3

我想在我的项目中有一个“manifest.json”文件,其中包含项目所依赖的 .cs 和 .dll 文件的列表,但不是项目的一部分。要在构建时也编译这些文件,我需要以某种方式告诉 Visual Studio 将这些源文件和程序集包含到构建过程中。

有没有办法在预构建事件中做到这一点?

4

2 回答 2

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>

我对此也很陌生,所以请随时改进这个;)

于 2013-02-07T17:46:36.960 回答
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 删除了宏功能....

于 2013-02-06T14:33:50.983 回答