将 DLL 添加到资产文件夹时,无法 运行 引用重写器并出现命令错误和统一错误

Failed to run reference rewriter with command error with unity error when adding a DLL to the assets folder

我在将 DAI.dll 添加到资产文件夹时遇到了这个错误。 当我尝试构建时发生此错误。

UnityException: Failed to run reference rewriter with command --target="Temp\StagingArea\DAI.dll" --additionalreferences="Temp\StagingArea","C:\Program Files (x86)\Windows Kits\UnionMetadata.0.17134.0\Facade","C:\Program Files (x86)\Windows Kits\References.0.17134.0\Windows.AI.MachineLearning.Preview.MachineLearningPreviewContract.0.0.0","C:\Program Files (x86)\Windows Kits\References.0.17134.0\Windows.ApplicationModel.Calls.CallsVoipContract.0.0.0","C:\Program Files (x86)\Windows Kits\References.0.17134.0\Windows.ApplicationModel.SocialInfo.SocialInfoContract.0.0.0","C:\Program Files (x86)\Windows Kits\References.....(followed by alot more of this)....

我正在使用 visual Studio 2017 版本 15.7.3 和 Unity 版本 2017.2.0b7

我已经在unity中把dll添加到assets文件夹了

这些是我的播放器和构建设置。

您需要在unity中更改设置(下图中的设置示例):

  1. 在 Unity 中的项目中找到您的 dll 文件。
  2. 单击一次以突出显示它。
  3. 您将在 Ispector 中看到 dll 选项
  4. 通常对于 HoloLens,您只需 select“WSAPlayer”
  5. 单击“应用”保存设置。
  6. 重建

警告

  1. 有时您尝试包含的 dll 引用了其他内容但未包含在内,这就是它不起作用的原因,但错误将与您得到的不同。
  2. 有时您可能需要导入旧版本的 DLL。例如,我尝试导入 Newtonsoft.Json 11.0.2,但 11.0.2 引用的核心框架比 unity 生成的解决方案更新。有办法更新,但是不想每次都去处理,所以才发现自己能用的最高版本是9.0.1(只好跳过11.0.2、11.0.1、 10.0.3、10.0.2、10.0.1).
  3. 此外,请记住您应该包含 netstandard dll。
  4. 我通常手头有 UWP 测试项目来尝试用它测试我的 dll。如果它在那里工作,那么这是一个很好的第一步,假设它没有依赖项,它可能会在导入到 Unity 后工作。

最后的结果解决方法

  1. 您可以评论引用您的 dll 的代码
  2. 在没有 dll 的情况下从 unity 构建项目
  3. 在生成的UWP方案中,可以正常添加dll,甚至可以使用nuget安装你想要的dll
  4. Uucomment你的代码。
  5. 构建您的解决方案然后部署到您的设备或创建一个包以将其部署到设备或商店。
  6. 作为变通方法,这很好用。
  7. 一个问题是,如果删除了解决方案,每次生成解决方案时都需要导入 dll 或安装 nuget。这很烦人,如果你和一个团队一起工作,当他们得到项目并认为它不起作用时,它会变得混乱。这意味着您需要做更多的工作来沟通和部署。
  8. 第二期,Unity 正在从 .NET 后端转向 IL2CPP(我认为您无法在 CPP 生成的项目中执行此操作)。这意味着这是一个短期的解决方法。

考虑升级到 Unity 2018.2

  1. 使用 .NET 4.X 而不是 .NET 3.4 Equivalent 让我的生活更轻松,因为参考和与参考相关的问题以及使用更现代的 C# 代码。
  2. 如果你安装了Unity Hub,你可以安装它并且仍然保留2017版本。这将最大限度地降低考虑更新的风险。