Jos*_*rty 9 .net c# msbuild entity-framework
我正在使用Roslyn编译,发出和运行C#源代码.但是,当遇到使用EntityFramework的项目时,我遇到了限制.
似乎只是简单地发出编译是不够的,因为有一个EntityDeploy构建任务在它们被发出后操纵它们.(我相信它在发布后会在DLL中嵌入元数据工件).
在.csproj我正在处理的文件中,我看到以下实体部署任务:
<EntityDeploy Include="Models\Northwind.edmx">
<Generator>EntityModelCodeGenerator</Generator>
<LastGenOutput>Northwind.Designer.cs</LastGenOutput>
</EntityDeploy>
Run Code Online (Sandbox Code Playgroud)
是否可以直接调用此构建任务并操纵我发出的DLL?
注意:我不想简单地调用msbuild.exe或运行文件中的MSBuild所有内容 .csproj.我正在构建的项目存在于内存中,但不存在于磁盘上,因此在我的情况下不起作用.
我正在努力学习如何使用这些Microsoft.Build.Evaluation东西.我可以找到EntityDeploy任务,但我对如何调用它(以及我应该提供的参数)感到茫然.
var project = new Project(@"C:\Users\JoshVarty\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1\WebApplication1.csproj");
//Get the entity deploy target? I'm not sure if this is a task or target.
var entityDeploy = project.Targets.Where(n => n.Key == "EntityDeploy").Single();
var projectTargetInstance = entityDeploy.Value;
Run Code Online (Sandbox Code Playgroud)
我也尝试查看EntityDeploy磁盘上存在的构建任务.
var entityDeployTask = new Microsoft.Data.Entity.Build.Tasks.EntityDeploy();
entityDeployTask.Sources = //I'm not sure where I can get the ITaskItem[] I need
entityDeployTask.EntityDataModelEmbeddedResources = //I'm not sure where I can get the ITaskItem[]
entityDeployTask.Execute();
Run Code Online (Sandbox Code Playgroud)
我同时品牌新MSBuild,EntityFramework和EntityDeploy,所以请纠正我,如果我滥用条款或在这种错误的方式来干脆.
请尝试以下操作:
var mockObject = new Mock<IBuildEngine>();
IBuildEngine engine = mockObject.Object;
var entityDeployTask = new EntityDeploy();
entityDeployTask.Sources = new ITaskItem[]
{
new TaskItem(@"path to edmx\Model1.edmx")
};
entityDeployTask.OutputPath = @"C:\";
entityDeployTask.BuildEngine = engine;
entityDeployTask.Execute();
Run Code Online (Sandbox Code Playgroud)
输出路径似乎没有被拾取,但如果它为空,则会记录错误。如果您实现自己的IBuildEngine并记录错误,您可以看到这一点。该过程的结果将是 edmx 旁边的三个文件:“Model1.ssdl”、“Model1.csdl”、“Model1.msdl”。这些文件需要作为嵌入式资源传递给 CSC,至少原始目标文件似乎是这样做的。
希望它对您有所帮助,并且至少可以帮助您入门。
| 归档时间: |
|
| 查看次数: |
1065 次 |
| 最近记录: |