Visual Studio 2019 常見問題及解決辦法


Ø  簡介

本文主要記錄本人在工作使用 VS2019 開發時所遇到的問題,以及對應的解決辦法。

1.  無緣無故代碼報紅色波浪線

2.  解決 NU1605 包降級錯誤

3.  解決 MSB3021 編譯報錯

4.  配置私有 NuGet 源后使用時報錯(401 Unauthorized)

 

1.  無緣無故代碼報紅色波浪線

Ø  錯誤描述

代碼中引用的類,或引用的命名空間報紅色波浪線,但是項目能正常生成成功,而且也能正常運行。

Ø  解決辦法

1)  關閉 Visual Studio

2)  刪除解決方案目錄下的 .vs 隱藏目錄和文件(該目錄和文件會在下次打開項目后自動創建);

3)  VS 重新打開項目OK(注意:之前項目中打開的文件會被全部清除掉,需要重新打開)。

 

2.  解決NU1605 包降級錯誤

Ø  錯誤描述

NU1605  檢測到包降級: System.Threading 4.3.0 降級到4.0.11。直接從項目引用包以選擇不同版本。

DataModel -> Jingle.HL.Common -> log4net 2.0.8 ->System.Console 4.0.0 -> runtime.unix.System.Console 4.3.0 ->System.Threading (>= 4.3.0)

DataModel -> Jingle.HL.Common -> log4net 2.0.8 ->System.Threading (>= 4.0.11)

clip_image002

Ø  錯誤原因

1)  從錯誤信息看出,是因為引用了第三方包"log4net",而導致依賴程序包之間的版本不一致所導致。

2)  在之前發布 Windows 環境時,是沒有這個依賴錯誤的,現在發布到 Linux x64 才出現了這個錯誤,具體原因不詳!?

Window Server 2019 發布選項

clip_image004

CentOS 7.6 發布選項

clip_image006

其實,兩者唯一的區別也就是目標運行時,但發布或編譯就有了明顯區別。

Ø  解決辦法

問題描述清楚了,下面是具體的解決辦法:

1)  首先,將 log4net 更新為最高版本。

2)  在輸出項目,也就需要發布項目".csproj"中添加以下引用聲明:

<PackageReference Include="Microsoft.NETCore.Targets" Version="3.1.0" PrivateAssets="all" />

clip_image008

3)  參考官網文檔

https://docs.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605

 

3.  解決 MSB3021 編譯報錯

Ø  錯誤描述

MSB3021無法將文件“E:\Jingle\Projects\HanLin\Api\v1.0.1\Jingle.HL.Api\Jingle.HL.Api\Jingle.HL.Api\obj\Debug\netcoreapp3.1\Jingle.HL.Api.exe”復制到“bin\Debug\netcoreapp3.1\Jingle.HL.Api.exe”。對路徑“bin\Debug\netcoreapp3.1\Jingle.HL.Api.exe”的訪問被拒絕。  Jingle.HL.Api   C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets    4643

Ø  解決辦法

1)  這個錯誤很奇葩,找了兩個小時也沒找到具體是什么原因,包括搜了下國外的一些網站,也沒有找到能解決的辦法!

2)  嘗試的辦法就差重啟電腦了,就是因為不想重啟,很多應用都打開了不想關閉了重開。嘗試了包括:清理解決方案、重新生成解決方案、重啟VS、用管理員身份運行VS、刪除 \netcoreapp3.1 目錄下的文件(但是有3個怎么也刪不掉,我想這就是罪魁禍首),還有些其他嘗試,怎么都生成報錯!

3)  最后,試了下把解決方案的目錄名改了,再重新打開VS生成,結果可以了。雖然不是什么好辦法,但是至少不用重啟。下次重啟了,再把路徑改回來,不改也行。比如:Jingle.HL.Api 我改為 Jingle.HL.Api2,這是解決方案的根目錄,所以不影響整個項目的生成。

4)  最后說明下:像這種 MSB302? 的錯誤代碼,都可以這樣嘗試下,因為也不單指3021

5)  看來得意的太早,生成是可以了,但是一運行:

clip_image010

就問尷尬不尷尬?打開這 html 啥也沒有,沒招了重啟吧!

clip_image012

6)  重啟就可以了么?答案是 NO

又花了20分鍾,找到原因,這個錯誤其實跟之前的沒關系,是因為以下兩點導致:

clip_image013

不知道什么時候,在項目根目錄下多了一個"App_Offline.htm"文件,該文件默認是空的,有了這個文件項目托管模型就不能設置為進程外,否者就提示上面的錯誤:

clip_image014

相反,如果要設置為進程外,把這個文件刪除即可。

注:"App_Offline.htm" 文件還是有點用的,不過這里用不了就刪除吧。

 

總結:其實最開始的錯誤提示"MSB3021",改文件目錄名是可以的。跟這個"App_Offline.htm"有沒有關系就不得而知了。

 

4.  配置私有 NuGet 源后報錯(401 Unauthorized)

Ø  錯誤描述

[mynuget_source] “http://nuget.xxxx.com/xxxxxx”處的V2 源返回了意外的狀態代碼“401 Unauthorized”

Ø  錯誤原因

是因為需要使用用戶/密碼來訪問私有nuget 源,並沒有在 NuGet.config中配置導致。

Ø  解決辦法

打開 %appdata%\NuGet\NuGet.Config 文件,在<configuration>節點中加入以下配置信息,例如:

<mynuget_source >

  <add key="Username" value="user_name"/>

  <add key="ClearTextPassword" value="your password " />

</mynuget_source >


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM