Я пытаюсь использовать WCF в своем проекте Unity, поэтому мне нужно ссылаться на dll System.ServiceModel. Кроме того, это еще немного информации о моем окружении:
Следуя Документ Unity по загрузке внешних сборок, я создал файл msc.rsp в моем каталоге Assets/:
-r:System.ServiceModel.dll
В моей папке Assets/ у меня также есть файл C#, которому нужен WCF:
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
public class CommunicationEndpoint {
private const short Port = 8000;
private ServiceHost host;
public void Start() {
this.EnsureInitilized();
host.Open();
}
public void Stop() {
if (this.host != null) return;
host.Close();
}
private void EnsureInitilized() {
if (this.host != null) return;
this.host = new ServiceHost(typeof(CommunicationService));
host.AddServiceEndpoint(typeof(ICommunicationService), new BasicHttpBinding(), Address);
host.Open();
}
private string Address {
get { return "http://localhost:" + Port; }
}
}
Есть еще один файл, в котором определен интерфейс ICommunicationService, который по-прежнему является частью ресурсов внутри Assets/. Не сообщал здесь, так как это не так полезно.
По сути, в Unity ничего не происходит: я все еще получаю ошибки во время компиляции, когда очевидно, что сборка вообще не загружалась.
Примечание Я также повторно импортировал все, щелкнув правой кнопкой мыши панель Assets в Unity и щелкнув Reimport All, чтобы убедиться, что проект C# будет регенерирован. Я вижу, что он восстановлен, но по-прежнему ничего не меняется: те же проблемы.
Что я делаю неправильно?
Разве Unity не должна позаботиться о добавлении этой ссылки? Если я сделаю это, то в следующий раз, когда я внесу изменение и Unity повторно создаст проект C#, мои ручные изменения будут отменены.
Прямое изменение проекта C# я считаю неправильным, потому что это сгенерированный файл. Если что-то случится, я потеряю свои изменения
Я пробовал то, что вы предложили, у Visual Studio больше нет проблем, и я могу скомпилировать, но, возвращаясь к Unity, ошибки все еще существуют. Когда я обновляюсь в Unity, проект регенерируется, и мои изменения исчезают, и ошибки снова возвращаются в Visual Studio. Я не думаю, что это правильный подход :(





Я попытался создать аналогичный проект, в котором у меня был файл mcs.rsp с -r:System.ServiceModel.dll внутри, в то время как у меня была ссылка .cs на пространство имен ServiceModel, и у меня возникла та же проблема.
После смены проекта Scripting Runtime Version на .NET 4.0 Equivalent и Api Compability Level на .NET 4.x он заработал.
If part of the API seems to be missing, it might not be included with .NET Standard 2.0. The Project may need to use the .NET 4.x Api Compatibility Level instead.
https://docs.unity3d.com/Manual/dotnetProfileAssemblies.html
Хорошо ... Я попытался найти эту опцию в единстве ... где мне поменять Scripting Runtime Version? а где поменять API Compatibility Level? Не могу найти их извините
Хорошо, нашел в настройках Player :)
Вы случайно не знаете, почему не загружается System.ServiceModel.Web.dll? Я добавил его в файл mcs.rsp и повторно импортировал все, но в сгенерированном проекте нет этой dll :(
msc.rsp делать включает System.ServiceModel.dll путем добавления содержимого
-r:System.ServiceModel.dll
для редактора Unity
Однако есть ошибка, связанная с dll-ссылкой не будет, включенной в csproj: https://issuetracker.unity3d.com/issues/httpclient-namespace-is-not-recognized-in-vs-with-net-4-dot-x
Вы можете попытаться решить проблему, изменив файл csproj самостоятельно: https://docs.microsoft.com/en-us/visualstudio/cross-platform/customize-project-files-created-by-vstu?view=vs-2017
Справка : https://forum.unity.com/threads/using-dynamic-keyword-not-working.490600/
вы пробовали добавить ссылку на сборку? проверьте здесь: stackoverflow.com/a/5647493/1287916