【问题标题】:Failed to run reference rewriter with command error with unity error when adding a DLL to the assets folder将 DLL 添加到资产文件夹时,无法运行引用重写器并出现命令错误和统一错误
【发布时间】:2023-03-28 14:15:01
【问题描述】:
我在将 DAI.dll 添加到资产文件夹时遇到了这个错误。
当我尝试构建时会发生此错误。
UnityException: 无法使用命令运行引用重写器 --target="Temp\StagingArea\DAI.dll" --additionalreferences="Temp\StagingArea","C:\Program Files (x86)\Windows Kits\10\ UnionMetadata\10.0.17134.0\Facade","C:\Program Files (x86)\Windows Kits\10\References\10.0.17134.0\Windows.AI.MachineLearning.Preview.MachineLearningPreviewContract\1.0.0.0","C:\Program文件 (x86)\Windows Kits\10\References\10.0.17134.0\Windows.ApplicationModel.Calls.CallsVoipContract\3.0.0.0","C:\Program Files (x86)\Windows Kits\10\References\10.0.17134.0\ Windows.ApplicationModel.SocialInfo.SocialInfoContract\2.0.0.0","C:\Program Files (x86)\Windows Kits\10\References.....(后面还有很多)......
我正在使用 Visual Studio 2017 版本 15.7.3 和 Unity 版本 2017.2.0b7
我已将 DLL 统一添加到 assets 文件夹中。
这些是我的播放器和构建设置。
【问题讨论】:
标签:
c#
.net
visual-studio
unity3d
hololens
【解决方案1】:
需要统一更改设置(下图中的设置示例):
- 在 Unity 中的项目中找到您的 dll 文件。
- 单击一次以突出显示它。
- 您将在 Ispector 中看到 dll 选项
- 通常对于 HoloLens,您只需选择“WSAPlayer”
- 点击应用保存设置。
- 重建
警告
- 有时您尝试包含的 dll 引用了其他未包含的内容,这就是它不起作用的原因,但错误会与您得到的不同。
- 有时您可能需要导入旧版本的 DLL。例如,我尝试导入 Newtonsoft.Json 11.0.2,但 11.0.2 引用了比统一生成的解决方案更新的核心框架。有办法更新,但不想每次都处理,所以发现能用的最高版本是9.0.1(11.0.2、11.0.1只好跳过, 10.0.3、10.0.2、10.0.1)。
- 另外,请记住,您应该包含 netstandard dll。
- 我通常手头有 UWP 测试项目来尝试用它来测试我的 dll。如果它在那里工作,那么这是一个很好的第一步,假设它没有依赖项,它可以在将其导入 Unity 后工作。
最后的结果解决方法
- 您可以注释引用您的 dll 的代码
- 在没有 dll 的情况下从统一构建项目
- 在生成的UWP解决方案中,可以正常添加dll,甚至可以使用nuget安装你想要的dll
- Uu 注释您的代码。
- 构建您的解决方案,然后部署到您的设备或创建一个包以将其部署到设备或商店。
- 这可以很好地解决问题。
- 其中一个问题是,如果解决方案被删除,则每次生成解决方案时都需要导入 dll 或安装 nuget。这很烦人,如果你和一个团队一起工作,当他们得到项目并认为它不起作用时,它会变得混乱。这意味着您需要做更多的工作来沟通和部署。
- 第二个问题,Unity 正在从 .NET 后端迁移到 IL2CPP(我认为您无法在 CPP 生成的项目中执行此操作)。这意味着这是一个短期解决方法。
考虑升级到 Unity 2018.2
- 使用 .NET 4.X 而不是 .NET 3.4 Equivalent 让我的生活更轻松,因为引用和与引用相关的问题以及使用更现代的 C# 代码。
- 如果您安装 Unity Hub,您可以安装它并仍然保留 2017 版本。这将最大限度地降低考虑更新的风险。