Я действительно имел дело с этим сегодня, поскольку исходное дерево моего проекта не настроено должным образом для запуска задачи сборки Entity Framework, которая генерирует и встраивает ресурсы в выходную dll.
Я исследовал следующие варианты:
Использование задачи EntityDeploy msbuild
Если вы откроете файл .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 задачи сборки в отражателе и посмотреть, что он делает.
Надеюсь, это поможет.