Контекст:
Мне нужно получить «устаревшее» .Net-приложение, работающее на моей локальной машине, которая является Macbook ... (большая часть нашего стека - dotnetcore), но это конкретное приложение немного старше.
Хотя я и понимаю, что гораздо проще, наверное, просто раскрутить виртуальную машину с Windows и встроить ее в нее, но я пытаюсь получить сборку проекта (и запустить с использованием MONO)
Пока что я решил несколько проблем, добавив несколько условных проверок в .csproj
, который заставлял сборку и запуск приложения ... едва ли он умирает, когда я нажимаю на первый API, который проверяет БД на связность .
Текущая настройка:
- Mono JIT-компилятор версии 5.18.1.3
- .Net Target 4.6.1
- Rider IDE (у меня также установлен VS для OSX)
- EF6.1.3
Проект структурирован так:
Project.Data
- App.Config
- DataModel.edmx
Project.Api (which references the Project.Data)
- Web.Config
Оба содержат следующую строку подключения (для краткости с отступом):
<add name="SomeEntities"
connectionString="
metadata=
res://*/DataModel.csdl|
res://*/DataModel.ssdl|
res://*/DataModel.msl;
provider=System.Data.SqlClient;
provider connection string=
"
data source=somedb;
initial catalog=some_catalog;
user id=some_id;
password=some_password;
App=EntityFramework;
"
"
providerName="System.Data.EntityClient" />
Проблема:
Я думаю, что обычная задача сборки НЕ генерирует правильные файлы из .edmx
, но что касается того, как это сделать в моей текущей среде ... Я начинаю думать, что это невозможно.
Ошибка:
Unable to load the specified metadata resource.
at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources
Я видел различные сообщения об изменении строки подключения, все с разными результатами, но никогда не приводившие к работающему приложению.
Изменение на metadata=res://*/;
приводит к:
Argument 'xmlReader' is not valid. A minimum of one .ssdl artifact must be supplied.
at System.Data.Entity.Core.EntityUtil.CheckArgumentEmpty[T]
Переход на стандартную строку SqlConnection:
System.Data.Entity.Infrastructure.UnintentionalCodeFirstException:
The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development. This will not work correctly. To fix this problem do not remove the line of code that throws this exception. If you wish to use Database First or Model First, then make sure that the Entity Framework connection string is included in the app.config or web.config of the start-up project. If you are creating your own DbConnection, then make sure that it is an EntityConnection and not some other type of DbConnection, and that you pass it to one of the base DbContext constructors that take a DbConnection. To learn more about Code First, Database First, and Model First see the Entity Framework documentation here: http://go.microsoft.com/fwlink/?LinkId=394715
Вопрос:
Это вообще возможно, или я должен просто вернуть Windows-машину?