可再发行组件中自定义控件的本地化

Localization of Custom Controls in a redistributable assembly

我正在尝试构建一个包含多个自定义控件 (CommonControls) 的可再分发程序集。 我的环境:MSVC 2010,ASP.NET (WebForms) .NET 2.0/3.0/3.5

问题:如果我通过 [本地化 CommonControls,使用 Web 部署项目 编译所有内容将无法工作=80=].

下面是我构建 CommonControls 程序集的方法:

我使用包含 .ascx 和 .ascx.cs 文件的网站:

和具有以下设置的 Web 部署项目

这将创建 "CommonControls.dll"。 该程序集将在不同的 ASP.NET WebApplication 中使用,如下所示:

web.config:

第一个(小)问题:添加 CommonControls 作为依赖项不会自动复制语言的附属程序集。手动将它们复制到正确的输出路径似乎可行(用于调试)。

主要问题:Main Web 应用程序也通过 App_GlobalResources 本地化并使用 构建Web 部署项目

构建过程将失败

ASPNETCOMPILER : error ASPRUNTIME: Object reference not set to an instance of an object.

两个部署项目都创建了一个名为 "bin\App_GlobalResources.compiled" 的文件,我猜这两个文件不能在同一个输出项目中和平共存。

是否有任何优雅的解决方案可以使用 ASP.NET 内置本地化来本地化 CommonContolsMain

注意:我正在处理的项目必须与 Apache+Mono 兼容,所以我的项目设置(上面的屏幕截图)必须完全像这样才能正常工作(已经测试了所有其他变体)。

我修好了。这是(可能)由 WDP 使用的 Bin 文件夹中的过时程序集引起的(不时手动清理该文件夹似乎是个好主意)。

我还将文件从 "CommonControls\Bin" 复制到最终输出(通过预构建事件),这不是必需的并且会导致一切中断(用于翻译的附属程序集由 MSVC 自动复制)。

虽然我的问题+解决方案可能对其他人没有那么大的帮助,但它至少是一个教程,说明如何使用一堆用户控件中的一些自定义控件构建可重新分发的程序集。

备注:

  • 必须合并自定义控件程序集的所有输出。否则我们将得到 2 "App_GlobalResources.dll" 个文件(不起作用)
  • 它只适用于 "Web-site project",不适用于 "Web application"
  • 用户控件必须使用 "CodeFile/Inherit" 标签,而不是已弃用的 "CodeBehind" 标签(删除所有那些“.designer.cs”文件!)
  • 用户控件必须有一个不同于控件名称的 "ClassName" 标签(我附加了 "Internal" 并在代码隐藏中重命名了 class(es))
  • "Web-site project" 不直接支持嵌入式资源(图像、脚本...)。我为此使用了一个额外的 LIB