Visual Studio在Unity中引用外部程序集时显示错误

时间:2018-06-25 06:20:52

标签: c# visual-studio unity3d

这基本上是我昨天发布的this question之后的后果问题。长话短说,在我的Unity应用程序中引用System.ServiceModel时遇到了麻烦,而通过安装此mcs.rsp file可以解决此问题:

-r:System.ServiceModel.dll

并通过将Scripting Runtime VersionApi Compability Level设置与.NET 4.x对齐。但是,现在我面临另一个问题。

Unity项目构建良好!

因此,让我首先指出我的项目运行正常,没有编译错误。因此,就此而言,这很好。我面临的问题是我在Visual Studio中遇到的烦恼并影响了我的开发经验。

Visual Studio中的错误

基本上,当我在Visual Studio中打开C#项目时,出现如下类型错误:

enter image description here

即使程序集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的mono生成的dll。但是System.ServiceModel.dll在哪里?
  • 我可以看到包含System.ServiceModel.dll的文件夹中有Facades,为什么没有使用它?

1 个答案:

答案 0 :(得分:1)

由于未使用正确的dll而收到错误。为了使用System.ServiceModelSystem.ServiceModel.Description名称空间中的任何内容,您必须引用Unity随附的正确的mono dll。

首先,将Scripting Runtime VersionApi Compatibility Level更改为 4.x .NET 4.6等效版本(选项取决于Unity版本)。 / p>

在计算机上转到<UnityInstallationDirectory>\Editor\Data\MonoBleedingEdge\lib\mono\4.5,例如C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono\4.5

在该目录中,一旦将System.ServiceModel.dll复制到您的<Project>\Assets路径,您就应该能够使用ServiceHostServiceEndpoint API。

您可能仍然会遇到运行时错误或异常,因为它是单声道的,但这应该可以解决当前的编译时错误。 在做这个答案之前,别忘了撤消您已经在问题中完成的工作。