在预编译的已部署网站中添加附属程序集

时间:2009-11-17 06:52:55

标签: asp.net satellite-assembly

为了在Visual Studio 2008中使用GetGlobalResourceObject(),我必须将.resx文件复制到Visual Studio的App_GlobalResources文件夹中。在预编译应用程序之后,资源文件将被编译到相应的附属程序集中,并按文化名称部署在\bin\文件夹下。一切正常。

但是,在预编译应用程序后,我无法添加新的附属程序集。我所做的是:

  1. 创建了一个附属程序集:

    resgen resources.applicationresources.es-ES.resx resources.applicationresources.es-ES.resources al / t:lib / culture:es-ES /embed:resources.applicationresources.es-ES.resources /out:App_GlobalResources.resources.dll

  2. 创建了文件夹\bin\es-ES\并在那里部署了.dll文件。

  3. 不幸的是,GetGlobalResourceObject()无法识别新添加的附属程序集,后者回退到默认(英语)资源。资源文件似乎没有任何问题,因为如果我将相同的.resx文件复制到App_GlobalResources然后编译应用程序,那么一切正常。

    我错过了什么? BTW我的项目类型是网站而不是网络应用项目。

2 个答案:

答案 0 :(得分:0)

(来自@ksa的评论)

可能出错的一件事是由resgen生成的DLL中的命名空间路径不正确,您可以使用ILDASM或Reflector来比较工作DLL中的命名空间和生成的不工作DLLS。然后,您可以更改resgen命令行以使用正确的命名空间生成。

答案 1 :(得分:0)

尝试连接到AppDomain.CurrentDomain中的AssemblyResolve事件,看看它是否正在寻找程序集。如果它确实在寻找它,你需要做的就是保留动态加载的程序集及其路径的列表。

关于AssemblyResolve的一个注释,如果你没有程序集,则返回null。这是默认行为。