在使用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
}

可以看到,资源的路径突然成为资源名称的一部分。

有没有人有任何想法如何解决这个问题?

在使用MSBuild()构建后运行测试时,丢失manifest resourceexception().资源在清单中有路

似乎将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文件,但错误仍然出现。

相关文章:
  • 没有找到相关文章