簡體   English   中英

Unity:Visual Studio 在 Unity 編譯代碼后丟失 DLL 引用

[英]Unity: Visual Studio loses DLL reference after Unity compiles code

我在 Unity 項目中使用 System.Compression.ZipFile.dll,並在 Visual Studio 項目和 Unity 編輯器中添加了引用,並且代碼按預期編譯和運行,沒有問題。

但是,每當 Unity 編譯代碼時,DLL 引用就會從 Visual Studio 項目中刪除。

因此,在 Visual Studio afterwords 中編譯將出現命名空間錯誤。 這些錯誤僅存在於 Visual Studio 中,因為 Unity 編輯器在實際編譯代碼時確實有引用。

這些錯誤通過將 DLL 引用重新添加到解決方案來修復。 我想阻止錯誤出現在 Visual Studio 中,因為它們很煩人。

當 Unity 實際編譯代碼時,如何防止從 Visual Studio 項目中刪除引用?

如果有幫助,我在 Windows 8.1 上使用 Visual Studio Community 2015 和 Unity Editor 2018.2.14f1,.NET 版本 4.7.1

編輯:

我的 mcs.rsp 文件包含:-r:System.IO.Compression.FileSystem.dll 基於統一論壇線程。 這很有趣,因為它不是預期的 DLL,但它仍然有效。

添加 -r:System.IO.Compression.ZipFile.dll 將導致:錯誤 CS0006:無法找到元數據文件“System.IO.Compression.ZipFile.dll”。

相關錯誤是:

CS1069 在命名空間“System.IO.Compression”中找不到類型名稱“ZipFile”。 此類型已轉發到程序集 'System.IO.Compression.FileSystem,Version=4.0.0.0,Culture=neutral,考慮添加對該程序集的引用。

錯誤 CS0006 找不到元數據文件 ProjectFolder\Temp\bin\Debug\Assembly-CSharp.dll'

Unity 已正確配置為使用 .NET 4.x

您得到的行為是預期的。

讓我們通過官方的方式來實現你正在尋找的東西:

  1. 將您的 DLL 復制到Assets目錄(可選)及其關聯的 IntelliSense XML 和 PDB 文件,以便 Unity 從中生成 MDB 文件
  2. Unity 重建項目和生成的 Visual Studio 解決方案

由於第 2 步重新生成 Visual Studio 解決方案,您對其所做的所有自定義都將丟失,手動添加的現有項目除外,以便能夠在調試您的游戲時逐步執行它們。

請注意,官方說明中沒有任何地方要求您添加對生成項目的引用,它是自動完成的,並且手動更改無論如何都會丟失,如前一段所述。

但是你會收到錯誤,對吧?

沒有更多信息很難判斷。

建議:

1.

嘗試官方說明,如果它不起作用,請編輯您的問題以添加相關錯誤,以便人們可以進一步嘗試幫助您。

2.

你的DLL是否匹配Unity的框架版本? 在某些情況下,否則它會產生有趣的錯誤。

當我查看System.IO.Compression.ZipFile的內容時,它僅適用於 .NET 4.6:

在此處輸入圖像描述

您的播放器設置是否與 .NET 4.6 匹配?

在此處輸入圖像描述

當您使用 C# 7 或 C# 8 中的一些新功能時會發生此問題。在我的例子中,我正在處理一個舊項目,該項目基於 .NET Framework 4.6 構建,並將一些 using 塊切換為簡化的 using 語句。 例如,而不是

using (var resource = new ExpensiveStuff())
{
   //whatever
}

我做了:

using var resource = new ExpensiveStuff();
//whatever

編譯器默默地允許我這樣做,但下一次構建失敗並出現 CS0006。 我花了一個小時才弄明白。 我正要重新安裝我的Windows ...大聲笑

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM