Передача ссылки на сборку в пользовательской задаче MSBuild - PullRequest
0 голосов
/ 27 октября 2009

Я пытаюсь написать задачу MSBuild для построения базы данных с использованием отображений FluentNhibernate.

Код задачи в данный момент выглядит следующим образом ...

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;
    }
}

и использование MSBuild выглядит следующим образом ...

  <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 завершается неудачно, поскольку сборка, содержащая мои отображения Fluent ('MyMappingAssemly'), отсутствует.

Если предположить, что отображения Fluent определены в другом проекте моего решения, каков наилучший способ сообщить моей задаче MSBuild о сборке отображения? Я думаю, что могу пойти по неправильному пути, используя свойство MappingAssemblyName.

1 Ответ

1 голос
/ 27 октября 2009

Я предполагаю, что вы хотите получить путь к выходу проекта, который определяет ваши «плавные отображения». Вы можете использовать цель GetTargetPath следующим образом:

<MSBuild Projects="..\path\to\projectfile" Targets="GetTargetPath">
    <Output TaskParameter="TargetOutputs" ItemName="ProjectPath"/>
</MSBuild>

Возможно, вы захотите установить конфигурацию / платформу для целевой платформы следующим образом:

Properties="Configuration=$(Configuration); Platform=$(Platform)"

Но это будет нормально работать, только если config / platform для указанного проекта совпадает с текущим проектом. Если у вас есть другие значения, установленные файлом решения, вам придется использовать задачу AssignProjectConfiguration.

Так как, я не уверен, что это именно то, что вы хотите, я остановлюсь здесь и добавлю больше информации позже, если потребуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...