BuildAction =内容递归

时间:2012-07-26 17:59:54

标签: .net msbuild

我有一个程序集,其中包含一个BuildAction = Content和Copy to output = Always的文件。现在我构建依赖于Assembly的Executable,我希望VisualStudio / MsBuild以某种方式将内容文件复制到输出,以便Assembly可以工作。但它不会发生。

目前我手动解决此问题:将这些文件添加为可执行项目的链接或在构建事件中复制。有没有办法以自动方式解决这个问题?

3 个答案:

答案 0 :(得分:4)

如果手动编辑代表项目的.csproj文件,则可以完成此操作。

例如,假设您有一个名为“二进制文件”的文件夹需要将其复制到输出目录(我建议使用“无”的构建操作和“始终复制到输出目录”,但此方法可以用于我将在下面展示。:

关闭visual studio,没有添加任何“二进制文件”文件或文件夹。在Windows资源管理器中,浏览到项目目录,然后使用所需文件手动创建此“二进制文件”文件夹。然后,使用文本编辑器编辑项目的.csproj文件。查找包含多个“ItemGroup”标记的文件部分。你想要做这个补充:

<ItemGroup>
    <None Include="binaries\**\*.*">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

再次在Visual Studio中打开项目时,您会发现包含正确构建操作和复制设置的内容。

可以使用内容构建操作完成相同的操作,而不是:

<ItemGroup>
    <Content Include="binaries\**\*.*" />
</ItemGroup>

然而,我在野外使用它的成功率较低。

这是解决此问题的另一个答案:

Is there a way to automatically include content files into asp.net project file?

答案 1 :(得分:0)

//this is the class library project
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ClassLibrary1
{
    public class Class1
    {
        public Class1()
        {
            string res = "";
            using (StreamReader sr = new StreamReader("TextFile1.txt"))
            {
                res = sr.ReadToEnd();
            }
            Console.WriteLine("ok dll {0}",res);
            Console.ReadLine();
        }
    }
}
//I add a text file which name is TextFile1.txt with BuildAction = Content and Copy to output = //Always 
//it contains a sentence
i am in the file no problem


//a console application that refers the class library
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using ClassLibrary1;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();

        }
    }
}


//it is ok, with a rebuild all if you update the text file...

答案 2 :(得分:0)

您可以将BuildAction更改为EmbeddedResource,就像在Assembly中一样,您可以轻松访问它。