在自定义MSBuild任务中传递程序集引用
我正在尝试编写一个MSBuild任务,以使用FluentNhibernate映射构建数据库 当前任务的代码如下所示在自定义MSBuild任务中传递程序集引用,msbuild,fluent-nhibernate,Msbuild,Fluent Nhibernate,我正在尝试编写一个MSBuild任务,以使用FluentNhibernate映射构建数据库 当前任务的代码如下所示 public class CreateDatabase : Task { [Required] public string ConfigFile { get; set; } [Required] public string MappingAssemblyName { get; set; } public override
public class CreateDatabase : Task
{
[Required]
public string ConfigFile
{ get; set; }
[Required]
public string MappingAssemblyName
{ get; set; }
public override bool Execute()
{
var mappingAssembly = Assembly.Load(MappingAssemblyName);
var config = new Configuration();
config.Configure(ConfigFile);
var fluentConfig = Fluently.Configure(config)
.Mappings(m => m.FluentMappings.AddFromAssembly(mappingAssembly));
var sessionSource = new SessionSource(fluentConfig);
sessionSource.BuildSchema();
return true;
}
}
<ItemGroup>
<Content Include="hibernate.cgf.xml" />
</ItemGroup>
<UsingTask AssemblyFile="..\lib\MyUtilities.MSBuild.dll" TaskName="CreateDatabase" />
<Target Name="Build" >
<CreateDatabase ConfigFile="@(Content)" MappingAssemblyName="MyMappingAssemlyName" />
</Target>
MSBuild的用法如下所示
public class CreateDatabase : Task
{
[Required]
public string ConfigFile
{ get; set; }
[Required]
public string MappingAssemblyName
{ get; set; }
public override bool Execute()
{
var mappingAssembly = Assembly.Load(MappingAssemblyName);
var config = new Configuration();
config.Configure(ConfigFile);
var fluentConfig = Fluently.Configure(config)
.Mappings(m => m.FluentMappings.AddFromAssembly(mappingAssembly));
var sessionSource = new SessionSource(fluentConfig);
sessionSource.BuildSchema();
return true;
}
}
<ItemGroup>
<Content Include="hibernate.cgf.xml" />
</ItemGroup>
<UsingTask AssemblyFile="..\lib\MyUtilities.MSBuild.dll" TaskName="CreateDatabase" />
<Target Name="Build" >
<CreateDatabase ConfigFile="@(Content)" MappingAssemblyName="MyMappingAssemlyName" />
</Target>
但现在我被卡住了
毫不奇怪,Assembly.Load失败,因为包含my Fluent映射的程序集(“MyMappingAssemly”)不存在
假设Fluent映射是在我的解决方案中的另一个项目中定义的,那么告诉我的MSBuild任务有关映射程序集的最佳方式是什么?我认为使用“MappingAssemblyName”属性可能走错了路。我假设您想要获取项目输出的路径,该路径定义了“流畅的映射”。您可以像这样使用“GetTargetPath”目标:
<MSBuild Projects="..\path\to\projectfile" Targets="GetTargetPath">
<Output TaskParameter="TargetOutputs" ItemName="ProjectPath"/>
</MSBuild>
Properties="Configuration=$(Configuration); Platform=$(Platform)"
但是,只有当引用项目的配置/平台与当前项目匹配时,这才能正常工作。如果解决方案文件设置了不同的值,则必须使用AssignProjectConfiguration任务
因为,我不确定这是否正是您想要的,如果需要,我将停在这里,稍后添加更多信息。谢谢Ankit,这帮了大忙。虽然我似乎不得不使用“PropertyName”属性,而不是“ItemName”。我现在有一个单独的问题。我的自定义任务依赖于其他第三方程序集。当MSBuild执行任务时,如何确保这些程序集存在?添加了对调用任务的项目的引用。添加了此问题