VS2010 未将文件嵌入程序集



由于VS2010中的某种原因,我无法将任何文件嵌入到程序集中。这些文件的"生成操作"属性应设置为"嵌入的资源",但在执行程序集时,它找不到任何资源。例如,以下测试代码:

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

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

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

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

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

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

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

最后,我找到了原因:

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

f include="@(_Temporary)"/>

而不是

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

那个 F 是如何出现的以及为什么那个文件首先被更改了,我不知道......尽管我做了几年的.NET程序员,但我今天才意识到".target"文件,因为我从来没有需要查看MSBuild的东西。

最新更新