首页 > 解决方案 > Visual Studio 在 Unity 中引用外部程序集时显示错误

问题描述

这基本上是我昨天发布的这个问题之后的一个后果问题。长话短说,我在 Unity 应用程序中引用时遇到了麻烦,我通过以下方式解决了这个问题:System.ServiceModelmcs.rsp file

-r:System.ServiceModel.dll

并通过将Scripting Runtime VersionApi 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>

所以这让我想知道:

标签: c#visual-studiounity3d

解决方案


您收到错误是因为您没有使用正确的 dll。为了使用System.ServiceModelandSystem.ServiceModel.Description命名空间中的任何内容,您必须引用 Unity 附带的正确单声道 dll。

首先,将Scripting Runtime Versionand更改Api Compatibility Level4.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。ServiceHostServiceEndpoint

您可能仍然会收到运行时错误或异常,因为这是单声道,但这应该可以修复您当前的编译时错误。在执行此答案中的操作之前,不要忘记撤消您在问题中已经完成的操作。


推荐阅读