如何在VS 2019新格式项目之间共享Assembly Info信息?
在VS新SDK风格项目中共享Assembly设置(版本、版权等)
刚好对这个问题很熟悉!在VS的新SDK风格项目里,确实不用再像旧格式那样手动链接AssemblyInfo文件了——毕竟现在这些属性都直接写在csproj这个简洁的XML文件里。这里有几种更高效的方式来共享这些配置:
1. 用Directory.Build.props自动全局共享(最推荐)
这是MSBuild原生支持的“魔法文件”,只要把它放在解决方案根目录,目录下所有的项目都会自动继承里面的配置,完全不用手动操作:
- 第一步:在解决方案根文件夹里新建一个名为
Directory.Build.props的文件(文件名必须完全一致,MSBuild会自动识别) - 第二步:把你要共享的Assembly属性写进去,比如:
<Project> <PropertyGroup> <!-- 版本相关属性 --> <Version>1.2.3.0</Version> <AssemblyVersion>1.2.0.0</AssemblyVersion> <FileVersion>1.2.3.0</FileVersion> <!-- 版权、公司信息 --> <Copyright>© 2024 我的公司</Copyright> <Company>我的公司</Company> </PropertyGroup> </Project>
- 第三步:如果某个项目需要自定义特定属性(比如单独的版本号),直接在它自己的csproj里添加对应的属性就行——项目里的设置会覆盖
Directory.Build.props里的共享值,优先级更高。
这种方法的优势太明显了:新增项目自动继承配置,不用手动维护任何链接,完全自动化。
2. 自定义.props文件按需导入(灵活分组)
如果不想让所有项目都用同一份共享配置,或者需要给不同项目组设置不同的共享规则,可以自定义一个props文件,然后手动导入到需要的项目里:
- 第一步:创建一个自定义的props文件,比如
SharedAssemblySettings.props,内容和上面的Directory.Build.props类似,只放你需要共享的属性 - 第二步:在目标项目的csproj文件里添加导入语句(路径根据你的文件位置调整):
<Import Project="..\SharedAssemblySettings.props" />
这种方法适合项目有分组需求的场景,比如解决方案里的工具类项目用一套共享配置,业务项目用另一套。
3. 模拟旧格式的文件链接(不推荐,但兼容习惯)
如果你还是习惯旧格式的“共享文件链接”方式,也可以这么做,但需要额外禁用项目的自动AssemblyInfo生成:
- 第一步:创建一个
SharedAssemblyInfo.cs文件,写入共享的Assembly特性:
using System.Reflection; [assembly: AssemblyVersion("1.2.0.0")] [assembly: AssemblyCopyright("© 2024 我的公司")]
- 第二步:在每个需要共享的项目的csproj里添加文件链接:
<ItemGroup> <Compile Include="..\SharedAssemblyInfo.cs" Link="Properties\SharedAssemblyInfo.cs" /> </ItemGroup>
- 第三步:必须禁用自动生成AssemblyInfo,否则会和你手动写的文件冲突,在项目的csproj里添加:
<PropertyGroup> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup>
这种方法比较繁琐,需要手动维护每个项目的链接,不如前两种高效,只适合特别习惯旧操作方式的场景。
总的来说,优先用第一种Directory.Build.props的方式,省心又高效,完全适配新项目格式的设计思路。
内容的提问来源于stack exchange,提问作者Mark A. Donohoe
相关产品推荐
相关产品推荐

