我如何实际替换正在运行的.Net DLL中的资源(.resx)文件?

时间:2009-12-17 14:05:23

标签: .net resources

这是我的情景:

我有一个.Net(3.5)DLL被ASP.Net Web应用程序引用。

DLL中的一个类有一个.resx文件,其中包含一个错误消息字符串,最终由调用的.aspx页面显示。

DLL使用多个命名空间,我将.resx文件设置为与调用它的类相同的命名空间,而.resx文件与使用的类具有相同的文件夹位置和文件名,后固定与'资源':即

班级:ClassName.cs
.resx:ClassNameResources.resx

它读取.resx字符串(在DLL中作为嵌入式资源编译)没有问题。

我遇到的问题是尝试替换已部署的Web应用程序中的错误消息字符串 - 我该如何实际执行此操作?

你能指点我吗? - 到目前为止我发现的最好的是this one,它表示使用regen.exeal.exe,但生成的.resources文件未被使用,因为错误消息没有不要改变。在这个阶段,我不是要尝试本地化任何文化,我正在尝试修改为默认文化返回的字符串。

感谢您提出的任何建议:o)

1 个答案:

答案 0 :(得分:3)

正如Lasse V. Karlsen所说,资源文件不适合您想要的东西。基本上,类和资源的字节代码被编译成一个程序集,最后是一个单元。

C#允许您通过Properties.Resources轻松使用资源文件中包含的资源....到目前为止一切顺利。

如果您正在本地化您的应用程序,您将获得另一个包含本地化资源的程序集(DLL)。内部机制使用该DLL来检索资源数据而不是标准程序集。

资源实际存储在 程序集中(使用Reflector查看我的意思)这使得无法将另一个资源文件放入同一文件夹中以供新资源使用。

资源文件类似于配置文件,它们被复制到部署文件夹(或其他位置),然后作为外部文件加载。

如果您想按照描述动态替换资源,则必须使用自己的资源加载机制。我很确定你不能使用内置的资源机制。