繁体   English   中英

本地化AssemblyInfo.cs

[英]Localize AssemblyInfo.cs

我的AssemblyInfo包含有关我的产品,公司等的信息。此数据目前在cs文件中进行了硬编码:

[assembly: AssemblyCompany("My Company.")]
[assembly: AssemblyProduct("MyProduct")]
[assembly: AssemblyCopyright("Copyright © 2012 My Company, Inc. All Rights Reserved.")]
[assembly: AssemblyTrademark("MyProduct is a trademark of MyCompany Software.")]
[assembly: AssemblyCulture("")]

我想本地化这些文本,但我无法执行以下操作:

[assembly: AssemblyCompany(Resources.MyConpany)]

有没有解决的办法 ?

是的,这是可能的。 这些属性本身很少被人们阅读,而这些人会关心语言。 但是,它们也被C#编译器用于生成/ win32res编译选项的默认版本。

这会影响您在资源管理器中查看程序集属性时看到的内容,使用“属性”快捷菜单项并查看“详细信息”选项卡。 Windows在这里显示的不是程序集属性,它对托管程序集一无所知。 您看到的是嵌入在程序集中的非托管资源中的数据。

您可以使用Visual Studio查看这些非托管资源的外观。 使用File + Open + File并导航到示例EXE程序集。 您将获得嵌入式资源的树视图,典型的.NET程序应该至少有三个。 一个图标,一个使程序UAC兼容的清单。 还有一个版本资源,你关心的那个。 打开该节点,您会看到ID为1的资源,标记为[中性]。 中立是资源的“任何语言的工作”版本。 双击它以打开编辑器(在Express中不起作用),您可以看到程序集属性如何映射到版本资源属性。

您需要做的是创建自己的这些非托管资源版本,这是一个使用多种语言的版本。 这需要编写一个.rc文件,一个资源脚本然后由rc.exe工具(非托管资源编译器)编译成.res文件。 然后使用Project + Properties,Application选项卡,“Resource File”单选按钮告诉编译器。

请注意,这有点痛苦和容易出错,rc.exe是一种气质工具,你确实失去了AssemblyInfo.cs和你在Windows中看到的直接链接,它是一个维护项目。 最好的方法是使用虚拟C ++项目并使用其内置资源编辑器将它组合在一起。

即使不可能“直接”本地化你的AssemblyInfo(例如,如你的问题中所示使用Resources.MyCompany ),你可以做的是在编译时,在实际编译之前生成完整的AssemblyInfo。

以下是如何使用免费和开源MSBuild社区任务执行此操作的一些示例:

这两个链接都显示了如何在一个单独的MSBuild文件中执行它,该文件被调用来构建解决方案,但是也可以将它直接放在.csproj文件中,这意味着在Visual中构建解决方案时, AssemblyInfo.cs的创建甚至可以工作。工作室。

以下是我的一个项目如何执行此操作的示例。
(请注意,在此示例中,我不生成整个AssemblyInfo.cs ,而是仅包含版本号的单独文件!)

MSBuild社区任务调用位于.csproj文件中

  <Target Name="BeforeBuild">
    <PropertyGroup>
      <ProdVer>0.0</ProdVer>
    </PropertyGroup>
    <PropertyGroup>
      <ProdVer Condition="'$(VersionNumber)' != ''">$(VersionNumber)</ProdVer>
    </PropertyGroup>
    <AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyVersion.cs" AssemblyVersion="$(ProdVer)" AssemblyFileVersion="$(ProdVer)" />
  </Target>

<AssemblyInfo ...行调用MSBuild社区任务来创建文件AssemblyVersion.cs ,版本号设置为$(ProdVer)
$(ProdVer)之前设置为0.0几行,当有一个名为$(VersionNumber)的环境变量不为空时, $(ProdVer)设置为该值。
并且在调用我的构建脚本之前设置$(VersionNumber) ,只需在批处理文件中调用set VersionNumber=1.1

这意味着当从Visual Studio构建时,使用版本号0.0创建AssemblyVersion.cs ,并在通过构建脚本构建时使用实际版本号(在我的示例1.1 )。

当然,以这种方式将本地化的公司信息添加到程序集中比在某处调用Resources.MyCompany更有用,但是可以根据需要本地化AssemblyInfo。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM