git checkout 新旧 csproj 格式之间的 slns

Nic*_*ick 6 c# msbuild csproj

我们最近在我们的解决方案上运行了 csproj 迁移工具,包含 156 个项目:

dotnet tool install --global Project2015To2017.Migrate2019.Tool
Run Code Online (Sandbox Code Playgroud)

尽管我们必须做一些修改,但效果非常好。然而,它引起了一个问题,即更改前后分支之间的切换会导致 assemblyinfo 出现问题。

错误是:

Duplicate 'global::System.Runtime.Versioning.TargetFrameworkAttribute' attribute [PROJECTNAME] 
Run Code Online (Sandbox Code Playgroud)

我相信这是因为新格式放置了 assemblyinfo.cs 而旧式 csproj 不知何故选择了它?您可以在此处看到文件出现问题的地方:

PROJECTNAMEe\obj\x64\Debug\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs
Run Code Online (Sandbox Code Playgroud)

这可以通过运行来修复:

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

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

pfx*_*pfx 4

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

在构建时,它们会进入自动生成的.cs文件中;
这是那个.NETFramework,Version=v4.7.2.AssemblyAttributes.cs文件。

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

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


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

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

<PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

keep-assembly-info指示迁移逻辑保留程序集信息文件。


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