我有一个程序集,其中包含一个BuildAction = Content和Copy to output = Always的文件。现在我构建依赖于Assembly的Executable,我希望VisualStudio / MsBuild以某种方式将内容文件复制到输出,以便Assembly可以工作。但它不会发生。
目前我手动解决此问题:将这些文件添加为可执行项目的链接或在构建事件中复制。有没有办法以自动方式解决这个问题?
答案 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中一样,您可以轻松访问它。