git 在新旧 csproj 格式之间检查 slns

git checkout slns between old and new csproj formats

我们最近 运行 我们的 156 个项目解决方案中的 csproj 迁移工具:

dotnet tool install --global Project2015To2017.Migrate2019.Tool

虽然我们不得不做一些修改,但效果很好。然而,它导致了一个问题,即在更改前后的 b运行 之间切换会导致 assemblyinfo 出现问题。

错误是:

Duplicate 'global::System.Runtime.Versioning.TargetFrameworkAttribute' attribute [PROJECTNAME] 

我相信这是因为新格式放置了 assemblyinfo.cs 而旧样式的 csproj 以某种方式拾取了它?您可以在此处看到文件出现问题的地方:

PROJECTNAMEe\obj\x64\Debug\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs

这可以通过 运行 解决:

1.  Close Visual studio/Rider
2.  git clean -xfd
3.  Get-ChildItem . -Include obj, .vs -Recurse -force | Remove-Item -Recurse -Force
4.  Rebuild solution

现在这个 有效 但令人恼火的是我们必须不断提醒自己这样做。有没有办法修改我们的新 csprojs 使其不这样做?

在新项目样式中,程序集信息相关属性在 .csproj 项目文件中定义,而旧样式在 AssemblyInfo.cs 文件中定义。

在构建时,这些会进入自动生成的 .cs 文件;
这里是 .NETFramework,Version=v4.7.2.AssemblyAttributes.cs 文件。

由于该文件在项目之外,因此在切换项目样式(通过分支开关)时不会清除它。

由于与旧项目样式项目中 AssemblyInfo.cs 文件中的信息冲突,这最终会导致这些 CS0579 错误。


您可以通过在 .csproj 文件中添加以下设置来防止新样式项目自动生成此类 AssemblyAttributes.cs 文件。

这意味着您必须在已转​​换的项目中恢复这些 AssemblyInfo.cs 文件。

<PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>

如果可能,您可以再次 运行 迁移并应用 keep-assembly-info flag

keep-assembly-info instructs the migrate logic to keep the assembly info file.


或者(如果这些旧的项目样式分支是暂时的),您还可以考虑在处理这些分支时将存储库第二次克隆到单独的路径。这样做他们不会共享相同的输出文件夹。