Visual Studio показывает ошибки при обращении к внешним сборкам в Unity - PullRequest
0 голосов
/ 25 июня 2018

Это в основном последствия вопрос после этот вопрос Я отправил вчера. Короче говоря, у меня были проблемы со ссылкой на System.ServiceModel в моем приложении Unity, и я исправил это с помощью mcs.rsp file:

-r:System.ServiceModel.dll

И при настройке параметров Scripting Runtime Version и Api Compability Level на .NET 4.x. Однако теперь я столкнулся с другой проблемой.

Проект Unity прекрасно работает!

Итак, позвольте мне сначала отметить, что мой проект работает нормально без ошибок компиляции. Так что на этот счет это нормально. Проблема, с которой я сталкиваюсь, - это раздражение, которое я испытываю в Visual Studio, и это влияет на мой опыт разработки.

Ошибки в Visual Studio

Обычно, когда я открываю проект C # в Visual Studio, я получаю ошибки типа, такие как:

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 требуемых dll. Однако где находится System.ServiceModel.dll?
  • Я вижу, что в папке, содержащей Facades, есть System.ServiceModel.dll, почему это не используется?

1 Ответ

0 голосов
/ 25 июня 2018

Вы получаете ошибку, потому что вы не используете надлежащую DLL. Чтобы использовать что-либо из пространства имен System.ServiceModel и System.ServiceModel.Description, вы должны сослаться на соответствующий моно dll, который поставляется с Unity.

Сначала измените Scripting Runtime Version и Api Compatibility Level на 4.x или .NET 4.6 Эквивалент (параметры зависят от версии 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, и вы сможете использовать ServiceHost и ServiceEndpoint API.

Вы все еще можете получить ошибку или исключение во время выполнения, так как это моно, но это должно исправить вашу текущую ошибку во время компиляции. Не забудьте отменить то, что вы уже сделали в своем вопросе, прежде чем делать то, что в этом ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...