1

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

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

4

3 回答 3

4

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

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

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

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

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

内容构建操作也可以这样做,而不是:

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

但是,我在野外使用它的成功率较低。

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

有没有办法自动将内容文件包含到 asp.net 项目文件中?

于 2012-08-31T01:25:24.733 回答
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...
于 2012-08-29T12:04:45.983 回答
0

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

于 2012-09-01T23:25:38.720 回答