Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问嵌套在.cs文件下的.resx文件的资源包装时,MissingManifestResourceException_C#_.net_Msbuild_Csproj - Fatal编程技术网

C# 访问嵌套在.cs文件下的.resx文件的资源包装时,MissingManifestResourceException

C# 访问嵌套在.cs文件下的.resx文件的资源包装时,MissingManifestResourceException,c#,.net,msbuild,csproj,C#,.net,Msbuild,Csproj,使用.csproj文件中的DependentUpon元素将.resx文件嵌套在.cs文件下,然后使用包装器访问资源时,将抛出MissingManifestResourceException 电文如下: 找不到任何适合指定区域性或非特定区域性的资源。确保“Namespace.Resource.resources”在编译时已正确嵌入或链接到程序集“assembly”,或者确保所需的所有附属程序集都是可加载和完全签名的 示例代码: MessageBox.Show(Resource.Key); 为什么

使用
.csproj
文件中的
DependentUpon
元素将
.resx
文件嵌套在
.cs
文件下,然后使用包装器访问资源时,将抛出
MissingManifestResourceException

电文如下:

找不到任何适合指定区域性或非特定区域性的资源。确保“Namespace.Resource.resources”在编译时已正确嵌入或链接到程序集“assembly”,或者确保所需的所有附属程序集都是可加载和完全签名的

示例代码:

MessageBox.Show(Resource.Key);

为什么会发生此错误?

MSBuild目标
prepareResourceName
(取决于
PrepareResources
,它也调用
ResGen
)调用名为
CreateManifestResourceName
的任务
[请参见
Microsoft.Common.targets
]

此任务创建
.resources
文件的名称。对于C#创建名称的实际方法是
Microsoft.Build.Tasks.CreateCSharpManifestResourceName
中的
CreateManifestNameImpl
。此方法检查
.resx
文件是否将
.cs
文件作为父文件。在这种情况下,它会在
.cs
文件中搜索它能找到的第一个完全限定类名,并将其作为
.resources
文件名。
[请参见Microsoft.Build.Tasks.v4.0.dll]

.resx
包装器不期望此文件名更改,因此引发异常

我猜这个行为是为WinForms本地化实现的,它将其资源嵌套在相应的表单或控件下


我决定不嵌套
.resx
文件。一个可能的解决方案是实现一个任务,MSBuild为该任务提供了一个钩子。

是否有任何原因导致否决票?:)在谷歌上搜索一个确切的例外可以产生很多好的结果来帮助你的用户case@DJKRAZE请阅读整个问题(以及下面的答案)。我找到的任何Google结果都没有回答这个问题。我正在尝试将
.resx
嵌套在
.cs
中,它正在抛出该异常。我真的很想筑巢,你有什么办法吗?@JobaDiniz不,不值得这么麻烦。覆盖那个钩子可能是一条路,但我从来没有真正尝试过。