Unity:Unity编译代码后,Visual Studio丢失DLL参考

时间:2018-12-21 18:22:52

标签: c# visual-studio unity3d

我在Unity项目中使用System.Compression.ZipFile.dll,并已将引用添加到Visual Studio项目和Unity编辑器中,并且代码可以按预期进行编译和运行。

但是,只要Unity编译代码,DLL引用就会从Visual Studio项目中删除。

结果,在Visual Studio后续语言中进行编译将出现名称空间错误。这些错误仅在Visual Studio中存在,因为Unity编辑器在实际编译代码时确实具有引用。

通过将DLL参考重新添加到解决方案中,可以修复这些错误。我想阻止这些错误在Visual Studio中显示,因为它们很烦人。

当Unity实际编译代码时,如何防止从Visual Studio项目中删除引用?

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

编辑:

我的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,版本= 4.0.0.0,区域性=中性,请考虑添加对该程序集的引用。

找不到错误CS0006元数据文件ProjectFolder \ Temp \ bin \ Debug \ Assembly-CSharp.dll'

Unity已正确配置为使用.NET 4.x

2 个答案:

答案 0 :(得分:0)

您期望得到的行为。

让我们通过official way来实现您想要的目标:

  1. (可选)将DLL及其关联的XML复制到Assets目录中,并复制PDB文件,以便Unity从中生成MDB文件
  2. Unity重建项目和生成的Visual Studio解决方案

由于第2步重新生成了Visual Studio解决方案,因此您对其所做的所有自定义都会丢失,手动添加现有项目(以便在调试游戏时能够逐步完成这些项目)的例外。

请注意,在正式说明中,没有人希望您添加对生成的项目的引用,而是自动完成的,并且手动更改仍然会丢失,如上一段所述。

但是您遇到了错误,对吧?

没有更多信息很难说。

建议:

1。

请尝试使用官方说明,如果它不起作用,请编辑您的问题以添加相关错误,以便人们可以进一步尝试为您提供帮助。

2。

您的DLL是否与Unity的框架版本匹配? 在某些情况下,否则会产生有趣的错误。

当我查看System.IO.Compression.ZipFile的内容时,它仅适用于.NET 4.6:

enter image description here

您的播放器设置是否与.NET 4.6匹配?

enter image description here

答案 1 :(得分:0)

在C#7或C#8中使用某些新功能时,会发生此问题。 就我而言,我正在开发一个基于.NET Framework 4.6的旧项目,并将某些using块切换为简化using语句。例如,而不是

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

我做到了:

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

编译器无声地允许我执行此操作,但是下一次构建因CS0006而失败。我花了一个小时才弄清楚。我正要重新安装Windows ...大声笑