.net BuildAction=内容递归

.net BuildAction=内容递归,.net,msbuild,.net,Msbuild,我有一个程序集,其中包含一个BuildAction=Content和Copy to output=Always的文件。现在,我构建了依赖于程序集的可执行文件,我希望VisualStudio/MsBuild以某种方式将内容文件复制到输出,以便程序集可以工作。但事实并非如此 目前,我手动解决了这个问题:要么将这些文件添加为可执行项目的链接,要么在生成事件时复制。有没有办法自动解决此问题?如果手动编辑表示项目的.csproj文件,则可以完成此操作 //this is the class library

我有一个程序集,其中包含一个BuildAction=Content和Copy to output=Always的文件。现在,我构建了依赖于程序集的可执行文件,我希望VisualStudio/MsBuild以某种方式将内容文件复制到输出,以便程序集可以工作。但事实并非如此


目前,我手动解决了这个问题:要么将这些文件添加为可执行项目的链接,要么在生成事件时复制。有没有办法自动解决此问题?

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

//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...
例如,假设您有一个名为“binaries”的文件夹,您需要将其复制到输出目录(我建议始终使用“无”的生成操作和“复制到输出目录”,但此方法可以用于任何一个,如下所示):

关闭visual studio,不添加任何“二进制文件”文件或文件夹。在windows资源管理器中,浏览到项目目录,并手动创建此“二进制文件”文件夹,其中包含所需的文件。然后,使用文本编辑器编辑项目的.csproj文件。查找文件中带有多个“ItemGroup”标记的部分。您将要添加以下内容:

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

总是
当您再次在VisualStudio中打开项目时,您将发现包含了正确的生成操作和复制设置

相反,内容构建操作也可以这样做:

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

然而,我在野外使用它却没有那么成功

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


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

例如,假设您有一个名为“binaries”的文件夹,您需要将其复制到输出目录(我建议始终使用“无”的生成操作和“复制到输出目录”,但此方法可以用于任何一个,如下所示):

关闭visual studio,不添加任何“二进制文件”文件或文件夹。在windows资源管理器中,浏览到项目目录,并手动创建此“二进制文件”文件夹,其中包含所需的文件。然后,使用文本编辑器编辑项目的.csproj文件。查找文件中带有多个“ItemGroup”标记的部分。您将要添加以下内容:

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

总是
当您再次在VisualStudio中打开项目时,您将发现包含了正确的生成操作和复制设置

相反,内容构建操作也可以这样做:

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

然而,我在野外使用它却没有那么成功

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


您可以将BuildAction更改为EmbeddedResource,这样它就在程序集中,您可以轻松访问它。

您可以将BuildAction更改为EmbeddedResource,这样它就在程序集中,您就可以轻松访问它。

是否绝对有必要保留BuildAction=Content?@MAXE,我不确定。。。想法是什么?尝试清理整个解决方案并重建所有解决方案:我在我的机器上进行了尝试,它可以正常工作(在WPF解决方案中)。在MSDN上也有可能:看看“内容文件”部分,是否绝对有必要保留BuildAction=Content?@MAXE,我不确定。。。想法是什么?尝试清理整个解决方案并重建所有解决方案:我在我的机器上进行了尝试,它可以正常工作(在WPF解决方案中)。这在MSDN上是可能的:请看本手册的“内容文件”部分