1

出于某种原因,在 VS2010 中,我无法将任何文件嵌入到程序集中。这些文件的Build Action属性设置为应有的Embedded Resource ,但是在执行程序集时它没有找到任何资源。例如下面的测试代码:

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

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

此问题会影响使用 nettiers 的项目,在这种情况下,不方便将存储过程包含到数据库中,因此必须从Procedures.xml 文件中获取它们,顺便说一句,该文件在Build Action = Embedded Resource之后自动设置类生成,当然,当一个函数试图从中获取任何 SQL 脚本时,程序就会失败。

我还创建了几个测试项目,尝试嵌入 xml 和 gif,但始终没有成功。

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

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

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

4

1 回答 1

0

最后,我找到了原因:

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

<EmbeddedResource F Include="@(_Temporary)" />

代替

<EmbeddedResource Include="@(_Temporary)" />

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

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

于 2012-05-30T21:56:22.227 回答