Используйте MSBuild для создания Модели Платформы Объекта, не используя Файл Проекта?

Я нахожусь в процессе сборки сценарий для довольно большого проекта. Один из проектов требует, чтобы Модель Платформы Объекта была скомпилирована в библиотеку. Из-за пути сервер сборки работает, все сборки ручной работы для управления различными сценариями развертывания, не влияя на разработчиков и файлы проекта.

Там должен так или иначе генерировать Модель EF с помощью задачи MSBuild, не используя файл проекта, сгенерированный Visual Studio? В настоящее время фактические компиляции блока с помощью задачи CSC, однако фактическое развертываемое приложение перестало работать, потому что Модель EF не включена в скомпилированный блок.

Какие-либо указатели, в которые Цели или Задачи Сборки могут использоваться, чтобы генерировать модель и создать необходимые ресурсы для встраивания в блок?

Пожалуйста, примите во внимание

Компиляции проекта, прекрасные в Visual Studio, однако с помощью файла проекта на сервере сборки, не являются опцией, поскольку существуют различные изменения, который должен быть сделан к проекту во время развертывания, и этим управляют через сделанный на заказ сценарий за пределами управления групп разработчиков. Это работало успешно на несколько проектов, однако Модель EF вызывает некоторые головные боли в этом определенном сценарии.

Обновление

Текущее решение не идеально, но работы. Файл Проекта был изменен для копирования Образцовых ресурсов EF в папку в проекте на новой сборке конечных версий, которая затем проверяется в управление исходным кодом. Когда сценарий сборки работает на сервере, модели EF встраиваются в блок. Это, кажется, осуществимое обходное решение в настоящий момент.

5
задан BinaryMisfit 1 February 2010 в 11:07
поделиться

2 ответа

Я действительно имел дело с этим сегодня, поскольку исходное дерево моего проекта неправильно настроено для выполнения задачи сборки Entity Framework, которая генерирует и внедряет ресурсы в выходную dll.

Я исследовал следующие варианты:

Использование задачи msbuild EntityDeploy

Если вы откроете файл .csproj в блокноте, вы должны увидеть фрагмент XML, например

 <EntityDeploy Include="MyEntities.edmx">
  <Generator>EntityModelCodeGenerator</Generator>
  <LastGenOutput>MyEntities.Designer.cs</LastGenOutput>
 </EntityDeploy>

Это задача msbuild, которая использует Microsoft.Data.Entities.Build.targets и Microsoft.Data.Entities.Build.dll для чтения файла edmx, создания файлов ssdl, csdl и msl, а затем встраивания их в целевой объект. dll. (Эти файлы находятся в C: \ Windows \ Microsoft.NET \ Framework \ v3.5 ).

Использование EdmGen

Как указал Крейг, вы могли бы использовать EdmGen.exe , который поставляется с фреймворком. Я попробовал, но немного изменил данные в моем файле edmx, и EdmGen.exe, похоже, действительно хочет выполнить начальную генерацию из исходной базы данных.

Использование EdmGen2

EdmGen2.exe - это проект с открытым исходным кодом, который делает немного больше, чем EdmGen. В итоге я использовал его для создания файлов ssdl, csdl и msl. Вы можете просто указать его на свой файл edmx, и он сгенерирует необходимые файлы ssdl, csdl и msl. Затем я включил их вместе с моей dll и изменил строку подключения с

connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;

на

connectionString="metadata=./MyEntities.csdl|./MyEntities.ssdl|./MyEntities.msl;

. Примечание. Я сообщаю платформе Entity, что эти файлы находятся в том же каталоге, что и моя dll, а не встроены как ресурсы.

Все три из них, задача сборки, EdmGen и EdmGen2 - это тонкие оболочки, которые вызывают System.Data.Entity.dll для всех сложных вещей. В крайнем случае, вы можете заглянуть в dll задачи сборки в отражателе и посмотреть, что она делает.

Надеюсь, это поможет.

4
ответ дан 14 December 2019 в 19:12
поделиться

Да, есть командная утилита, называемая Edmgen , которая может сделать это. Используйте Edmgen /? для возможных коммутаторов.

1
ответ дан 14 December 2019 в 19:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: