问题
如果C#项目有个项目组合成,每次升级都需要修改csproj里面的版本号,处理起来比较麻烦
案例
common.targets
有如下两个项目,Main引用ClassLibrary1
namespace ClassLibrary1
{
public class Class1
{
public void SayHello()
{
Console.WriteLine("hello world");
}
}
}
Program.cs
namespace Main
{
internal class Program
{
static void Main(string[] args)
{
var c1 = new ClassLibrary1.Class1();
c1.SayHello();
}
}
}
新建common.targets
<Project xlmns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
两个解决方案中去掉原来的代码
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
修改为如下代码
<Import Project="../common.targets"/>
运行即可
但是这样也有一个不得劲的地方,就是每个分层,都需要写一个导入的语句。
Directory.Build.props
解决方案目录下新建Directory.Build.props
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
其他的地方删除即可
Directory.Build.props格式为utf-8,带BOM会报错
项目结构
参考
https://mp.weixin.qq.com/s/XnDZ-eKM0e6qVbfdwxGgRg
https://learn.microsoft.com/zh-cn/visualstudio/msbuild/customize-by-directory?view=vs-2022