dev*_*per 179 .net asp.net resourcemanager embedded-resource
我有两个ASP.NET Web项目(ProjectA和ProjectB).当ProjectA中的类实例化一个使用资源文件Blah.resx的ProjectB时,我收到此错误:
mscorlib.dll中出现"System.Resources.MissingManifestResourceException"类型的异常,但未在用户代码中处理.
找不到适合指定文化或中性文化的资源.确保在编译时将"Resources.Blah.resources"正确嵌入或链接到程序集"App_GlobalResources.sn_flri6",或者所有所需的附属程序集都是可加载和完全签名的.
是什么导致了这个?
微软的网站上有一篇关于这个http://support.microsoft.com/kb/318603的文章, 它建议:
若要解决此问题,请移动所有其他类定义,以便它们出现在窗体的类定义之后.
这是Windows Forms项目的解决方案,我不确定这是否也适用于Web项目.
CFi*_*nck 245
我刚刚在WPF项目中遇到了同样的异常.问题发生在我们最近移动到另一个名称空间(ProblemAssembly.Support
to ProblemAssembly.Controls
)的程序集中.尝试从程序集中存在的第二个资源文件访问资源时发生异常.
结果是附加资源文件没有正确地将引用从旧命名空间名称移动到新命名空间名称.
在资源文件的designer.cs中,有一个静态属性来获取ResourceManager.在该getter中,该字符串仍然引用旧的命名空间.一旦将其更正为新的命名空间,问题就解决了:
global::System.Resources.ResourceManager temp =
new global::System.Resources.ResourceManager(
"ProblemAssembly.Support.Properties.Stuff", typeof(Stuff).Assembly);
Run Code Online (Sandbox Code Playgroud)
本来应该:
global::System.Resources.ResourceManager temp =
new global::System.Resources.ResourceManager(
"ProblemAssembly.Controls.Properties.Stuff", typeof(Stuff).Assembly);
Run Code Online (Sandbox Code Playgroud)
希望这有助于下一个人.
小智 112
我解决了这个问题:
它完美地运作.
Mar*_*ata 21
当我尝试从一个C#项目与另一个C#项目共享resource.resx文件时,我遇到了这个问题.将Form类移动到其文件开头的建议是不合适的.这就是我解决它的方式.您基本上使用从第二个项目到第一个项目的链接,然后启用resource.designer.cs
文件的重新生成.
Properties/Resources.resx
文件Properties/Resources.resx
文件作为LINK添加到第二个项目中的Properties文件夹中.不要将它添加到项目的根级别.Properties/Resources.designer.cs
!Resources.resx
,添加ResXFileCodeGenerator
为CustomToolResources.resx
并选择"运行自定义工具".这将生成一个新的designer.cs文件.注意:我会避免编辑resource.designer.cs文件,因为这是自动生成的.
Soh*_*deh 18
对于在 .NET Core 3.0 中遇到此问题的用户,这可能与.NET Core 3.0 中所做的重大更改有关,要解决此问题,只需EmbeddedResourceUseDependentUponConvention
在项目 csproj 中将其设置为 false:
<PropertyGroup>
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
coc*_*pup 12
在我的情况下,一系列经过深思熟虑的全局文本替换无意中在资源设计器cs文件中更改了这一行.
由于该参数中的命名空间不再与该类的命名空间匹配,因此应用程序在运行时会感到困惑.
检查设计器的名称空间是否与该行中的字符串参数匹配.
小智 11
这是因为在*.res?
从迁移中排除.
小智 6
我通过转到保存我的资源文件的项目,向下滚动到其 ItemGroup 并添加与编译器预期的路径相对应的逻辑名称来解决此问题。
我的 EmbeddedResource 看起来像这样:
<ItemGroup>
<EmbeddedResource Update="Properties\TextResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>TextResources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
现在看起来像这样
<ItemGroup>
<EmbeddedResource Update="Properties\TextResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>TextResources.Designer.cs</LastGenOutput>
<LogicalName>MyProject.Properties.Resources.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
仅 Sibi Elangos 的回答对我来说是不够的,所以我不得不:
这将在您的/bin
文件夹中生成一个 App_GlobalResources ,现在将该文件夹也复制到 Web 应用程序的根目录
就我而言,问题是由类定义的错误顺序引起的。例如,我在 Form 类之前添加了另一个类定义:
namespace MyBuggyWorld
{
public class BackendObject //This hack broke the VS 2017 winform designer and resources linker!
{
public TcpClient ActiveClient { get; set; }
public BackgroundWorker ActiveWorker { get; set; }
}
public partial class FormMain : Form
{
}
}
Run Code Online (Sandbox Code Playgroud)
移动BackendObject
到文件末尾(更好的方法是将其移动到单独的文件)后,执行项目清理+重建解决了问题。
似乎没有人提到此解决方案。确实很明显-但是让我绊了一下...
新资源文件的默认访问修饰符是Internal
(或Friend
在VB.Net中)。请确保将其更改为Public
(在resx设计器中,访问修饰符的顶部有一个下拉列表)
归档时间: |
|
查看次数: |
183887 次 |
最近记录: |