升級csproj檔案為vs2017工程格式(SDK樣式)

時風拖拉機發表於2023-01-07

csproj檔案在VS2017後格式變更為SDK樣式。framework專案如果需要源連結等等功能,需要進行手動升級。

升級過程

升級需要Project2015To2017Nuget包。

> dotnet tool install --global Project2015To2017.Migrate2019.Tool

安裝完成,執行如下命令,也可以參考該工具的readme自定義:

> dotnet migrate-2019 wizard "D:\Path\To\My\TestProject.sln"

注意點

  • 專案csproj檔案需要自己看下有沒有明顯錯誤,我這裡出現了後期生成事件複製了多個節點的錯誤。

  • 格外需要注意後期生成事件會出現部分宏不生效導致的執行錯誤問題(我這裡vs2019下)。參考官方庫的issue這個issue
    這裡的原因是官方換了執行生成事件命令的節點。解決方法:在專案屬性頁把生成事件剪下出來,儲存專案,再複製進去,這時候生成事件就會出現在正確的節點下。

修改前的節點如下:

<PropertyGroup>
    <PreBuildEvent>"$(ProjectDir)PreBuildEvent.bat" "$(ProjectDir)..\" "$(ProjectDir)" "$(TargetDir)" 0 />
</PropertyGroup>

修改後的節點大概如下:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="&quot;$(ProjectDir)PreBuildEvent.bat&quot; &quot;$(ProjectDir)..\&quot; &quot;$(ProjectDir)&quot; &quot;$(TargetDir)&quot; &quot;$(DevEnvDir)&quot; 1 0" />
</Target>

自己編輯的話也可以,但是需要注意節點的位置變了

構建版本號

之前使用Jenkins change-assembly-version-plugin的來構建版本號,原理大概就是遍歷AssemblyInfo.cs檔案來替換版本。
現在可以直接修改 .csproj檔案如下:

<AssemblyVersion>1.2.3.4</AssemblyVersion>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>

之前的AssemblyInfo.cs就可以直接刪除了。

如果使用Jenkins構建版本的話,構建引數增加AssemblyVersion類似下面這樣,可以參考這裡

MSBuild.exe /p:AssemblyVersion=5.4.3.0

相關文章