在预构建事件上添加源文件和程序集引用

时间:2013-02-06 13:58:11

标签: c# visual-studio pre-build-event

我希望在我的项目中有一个“manifest.json”文件,其中包含项目所依赖的.cs和.dll文件列表,但不属于项目的一部分。要在构建时编译这些文件,我需要告诉Visual Studio将这些源文件和程序集包含在构建过​​程中。

我有没有办法在预制活动中做到这一点?

2 个答案:

答案 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已删除宏功能....