我的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("")]
Run Code Online (Sandbox Code Playgroud)
我想本地化这些文本,但我无法执行以下操作:
[assembly: AssemblyCompany(Resources.MyConpany)]
Run Code Online (Sandbox Code Playgroud)
有没有解决的办法 ?
Han*_*ant 10
是的,这是可能的.这些属性本身很少被人们阅读,而这些人会关心语言.但是,它们也被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 Community Tasks执行此操作的示例:
这两个链接都显示了如何在一个单独的 MSBuild 文件中执行此操作,该文件被调用以构建解决方案,但也可以将其直接放在 .csproj 文件中,这意味着创建 AssemblyInfo.cs在 Visual Studio 中构建解决方案时甚至可以工作。
这是我的一个项目中如何做到这一点的示例。
(请注意,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>
Run Code Online (Sandbox Code Playgroud)
该<AssemblyInfo ...行调用 MSBuild Community Tasks 创建一个文件AssemblyVersion.cs,版本号设置为$(ProdVer). 之前
$(ProdVer)设置为0.0几行,当存在名为$(VersionNumber)非空的环境变量时,$(ProdVer)设置为该值。
并$(VersionNumber)在调用我的构建脚本之前通过简单地调用set VersionNumber=1.1批处理文件进行设置。
这意味着在从 Visual Studio 构建时AssemblyVersion.cs使用版本号创建0.0,并在1.1通过构建脚本构建时使用真实版本号(在我的示例中)。
诚然,以这种方式将本地化的公司信息放入程序集比仅仅调用Resources.MyCompany某个地方需要更多的工作,但是可以根据需要对 AssemblyInfo 进行本地化。
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |