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