VS2010没有将文件嵌入到程序集中

时间:2012-05-26 11:39:18

标签: visual-studio-2010 embedded-resource

出于某种原因在VS2010中,我无法将任何文件嵌入到程序集中。这些文件的 构建操作 属性设置为 嵌入式资源 ,但是当程序集执行时没有资源。例如,以下测试代码:

string[] list = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
string msg = (list.Length > 0) ? "Full" : "Empty";
MessageBox.Show(msg);

始终显示“ Empty ”,因为 GetManifestResourceNames()始终返回一个空列表。

此问题会影响使用nettiers的项目,在该项目中,对于特定情况不方便将存储过程包含到DB中,因此必须从 Procedures.xml文件中获取它们,BTW是在生成类之后,使用 构建操作 = 嵌入式资源 自动设置,然后当函数尝试时从中获取任何SQL脚本,程序失败。

我还创建了几个测试项目,我试图嵌入一个xml和一个gif,但总是没有成功。

更新:问题似乎只适用于 C# 。我在 VB.Net 中重现了测试项目,并且文件确实嵌入了。我注意到在输出窗口中,在C#情况下,编译器命令行不包含 / resource 选项(后面应该包含要嵌入的文件的名称),而对于VB案例,它确实出现了。

我应该检查 C#的任何全局设置或配置文件吗? (项目的构建选项没什么奇怪的)

有没有人知道可能发生的事情以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

最后,我找到了原因:

Microsoft.CSharp.targets 文件(位于c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319内)中有一行错误。标签上写着:

  

< EmbeddedResource F Include =“@(_ Temporary)”/>

而不是

  

< EmbeddedResource Include =“@(_ Temporary)”/>

正确编写可以恢复嵌入文件的能力

F是如何出现的以及为什么该文件首先被改变,我不知道......尽管已经成为.NET程序员已有好几年了,但我今天才开始意识到“.targets”文件在网上搜索了这个问题,因为从来没有必要查看MSBuild的东西。