在使用MSBuild()构建后运行测试时,丢失manifest resourceexception().资源在清单中有路
本文关键字:resourceexception manifest 资源 丢失 单中 MSBuild 构建 运行测试 | 更新日期: 2023-09-27 18:05:40
我在命令行上使用MSBuild构建服务器上的c#项目的嵌入式资源有问题。当在Visual Studio中构建和运行测试时,项目工作得很好,但当从命令行运行MSBuild时,我在运行测试时遇到以下问题:
System.Resources。找不到任何适合指定区域性或中性区域性的资源。确保。财产。资源。资源"在编译时被正确嵌入或链接到程序集"中,或者所需的所有附属程序集都是可加载的并且是完全签名的。
System.Resources.ManifestBasedResourceGroveler。在system . resources . manifest . basedresourcegroveler中,处理resourcecestreammissing(字符串文件名)。2 localResourceSets, Boolean类型的parent, Boolean类型的createIfNotExists, StackCrawlMark&System.Resources.ResourceManager. stackMark)。内部getresourceset (CultureInfo requestdculture,布尔值createIfNotExists,布尔值parenters, StackCrawlMark&System.Resources.ResourceManager. stackMark)。在System.Resources.ResourceManager. InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean parent)。GetString(字符串名称,CultureInfo文化)在Properties. resources . get_someresource()在'Properties'Resources.Designer.cs:第87行
我已经将问题跟踪到生成的IL(我使用ildasm)。在Visual Studio中生成时,将在程序集的清单中设置以下内容:
.mresource public <PROJECTNAME>.Properties.Resources.resources
{
// Offset: 0x00000000 Length: 0x00000236
}
但是当使用MSBuild构建时,会生成以下输出:
.mresource public '../..//Build/<PROJECTNAME>_AnyCPU_Debug_Obj/<PROJECTNAME>.Properties.Resources.resources'
{
// Offset: 0x00000000 Length: 0x00000236
}
可以看到,资源的路径突然成为资源名称的一部分。
有没有人有任何想法如何解决这个问题?
似乎将LogicalName添加到项目文件中可以修复它:
<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName>
。因此,项目文件中嵌入的资源条目看起来像这样:
<ItemGroup>
<EmbeddedResource Include="Properties'Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
详情见:http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
注意,我们使用的是.resx文件,但错误仍然出现。