迁移至VS2017项目系统后,如何在自动生成AssemblyInfo时添加assembly:ThemeInfo属性
在VS2017自动生成AssemblyInfo.cs时添加ThemeInfo属性的方法
嘿,这个问题我之前也踩过坑——VS2017的新项目系统把AssemblyInfo.cs的生成完全自动化了,直接去改自动生成的文件根本没用,下次编译就会被覆盖。不过不用禁用自动生成,有两个简单靠谱的办法搞定:
方法一:添加自定义特性文件(最推荐)
完全不用碰自动生成的AssemblyInfo,直接在项目里新建一个类文件(比如命名为AssemblyThemeInfo.cs),然后在里面单独放ThemeInfo特性就行,编译器会自动合并所有程序集级别的特性:
using System.Windows; [assembly: ThemeInfo( ResourceDictionaryLocation.None, // 主题特定资源字典的位置 // 若在主题程序集中使用,设为ResourceDictionaryLocation.SourceAssembly ResourceDictionaryLocation.SourceAssembly // 通用资源字典的位置 )]
这个文件里不需要其他代码,就放这一段就够。编译时,自动生成的AssemblyInfo里的常规特性和这个文件里的ThemeInfo会一起生效,完美解决WPF查找Themes\generic.xaml的问题。
方法二:修改项目文件(.csproj)配置
如果你更喜欢通过项目配置来管理,也可以直接编辑.csproj文件,在<PropertyGroup>节点里加入以下配置:
<AssemblyThemeInfo> <ResourceDictionaryLocation>None</ResourceDictionaryLocation> <GenericDictionaryLocation>SourceAssembly</GenericDictionaryLocation> </AssemblyThemeInfo>
不过这种方式不如第一种直观,后续要调整特性参数的话,修改代码文件会更方便。
原理说明
VS2017的自动AssemblyInfo生成机制只负责处理版本、公司信息这类常规特性,它不会阻止你在其他文件中添加额外的程序集级特性。编译器在编译时会收集所有文件中的[assembly:]标记特性,合并到最终的程序集元数据里,所以完全不用担心冲突。
内容的提问来源于stack exchange,提问作者Lennart
相关产品推荐
相关产品推荐

