c# - Visual Studio 在 Unity 中引用外部程序集时显示错误
问题描述
这基本上是我昨天发布的这个问题之后的一个后果问题。长话短说,我在 Unity 应用程序中引用时遇到了麻烦,我通过以下方式解决了这个问题:System.ServiceModel
mcs.rsp file
-r:System.ServiceModel.dll
并通过将Scripting Runtime Version
和Api Compability Level
设置对齐到.NET 4.x
. 但是,现在我面临另一个问题。
Unity 项目构建良好!
所以,让我首先指出我的项目运行良好,没有编译错误。所以在这方面它很好。我面临的问题是我在 Visual Studio 中遇到的烦恼并影响了我的开发体验。
Visual Studio 中的错误
基本上,当我在 Visual Studio 中打开 C# 项目时,会出现如下类型错误:
即使程序集System.ServiceModel
现在已正确加载到项目中,Visual Studio 仍向我显示错误,抱怨这些突出显示的类型不可用。
找不到类型或命名空间“ServiceHost”(您是否缺少 using 指令或程序集引用?)
为什么?这在开发时非常烦人,我不可能进行整个开发而出现这样的虚假错误:(
还有一些信息...
如果我检查生成的项目文件Assembly-CSharp.csproj
,我可以看到:
<Reference Include="System.ServiceModel.Duplex">
<HintPath>C:/Program Files/Unity/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Duplex.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Http">
<HintPath>C:/Program Files/Unity/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Http.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.NetTcp">
<HintPath>C:/Program Files/Unity/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.NetTcp.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Primitives">
<HintPath>C:/Program Files/Unity/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Security">
<HintPath>C:/Program Files/Unity/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Security.dll</HintPath>
</Reference>
所以这让我想知道:
- 似乎 Unity 指向所需 dll 的单声道生成的 dll。然而在哪里
System.ServiceModel.dll
? - 我可以看到
System.ServiceModel.dll
包含 的文件夹中有Facades
,为什么不使用?
解决方案
您收到错误是因为您没有使用正确的 dll。为了使用System.ServiceModel
andSystem.ServiceModel.Description
命名空间中的任何内容,您必须引用 Unity 附带的正确单声道 dll。
首先,将Scripting Runtime Version
and更改Api Compatibility Level
为4.x或.NET 4.6 Equivalent(选项取决于 Unity 版本)。
转到<UnityInstallationDirectory>\Editor\Data\MonoBleedingEdge\lib\mono\4.5
或例如,C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono\4.5
在我的计算机上。
进入此目录后,复制System.ServiceModel.dll
到您的路径,<Project>\Assets
您应该可以使用API。ServiceHost
ServiceEndpoint
您可能仍然会收到运行时错误或异常,因为这是单声道,但这应该可以修复您当前的编译时错误。在执行此答案中的操作之前,不要忘记撤消您在问题中已经完成的操作。
推荐阅读
- reactjs - getInitialProps 永远不会执行
- java - 在 JAVA 中将字符串和字节 [] 转换为文件
- php - 将 P1M(一个月)添加到 DateInterval 类型会增加两个月
- scala - 为什么 spark to_json() 不填充空值?
- node.js - 有没有办法使用 fluent-ffmpeg 使用 NVDEC 和 NVENC?
- ios - 试图在 Flutter 中使用一个页面(和类)中的函数来控制或使用另一个页面中的函数
- bots - Dialogflow:有没有办法防止触发一级意图?
- django - 我应该如何在 Django 应用程序中使用 AAD 实现用户 SSO(使用 Django Microsoft Authentication Backend 模块)?
- c++ - 复制数组时后端绑定
- javascript - 如何使用 JavaScript 在 Jest 中模拟服务?