То, что я надеялся, что это будет час или два работы, теперь превратилось в настоящий разгром, без видимых результатов.
Проблема: я пытаюсь сериализовать копию моей конфигурации NHibernate и сохранить ее в... проект, который использовался для его генерации!
Текущее решение вручную: у меня есть проект Foo, который
- содержит серию файлов DomainObject.Map.cs
- Ссылка на файл "nhconfig.bin" для встраивания в качестве ресурса.
- Содержит статический метод FooGenerateNHConfig, который создает объект конфигурации и сериализует его в nhconfig.bin.
Чтобы сгенерировать его, я:
- (только в первый раз: создайте пустой nhconfig.bin, который действует как заполнитель).
- Build Foo.
- Вызовите юниттест, вызывающий FooGenerateNHConfig.
- Перестройка Foo.
- Развертывание приложения.
Я пытаюсь автоматизировать это, и подумал, что это будет просто:
- Создать проект Foo.BuildSupпорт, который ссылается на Foo.
- Определите в нем задачу X, которая будет вызывать FooGenerateNHConfig.
- Установите цель AfterCompile, которая будет вызывать X.
К сожалению, ятеперь получаю 2 ошибки.
Во-первых, несколько странное исключение:
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
---> System.Runtime.Serialization.SerializationException: Unable to find assembly 'FluentNHibernate, Version=1.1.0.685, Culture=neutral, PublicKeyToken=8aa435e3cb308880'.
Мне кажется, что FluentNHibernate жалуется, что не может найти сборку FluentNHibernate?
После первого запуска Задачи из Visual Studio Visual Studio (devenv.exe) блокирует мой Foo.BuildSupport.dll И мой Foo.exe (предположительно потому, что он просто видит их).в качестве поддержки библиотек, а не реальных библиотек сборки), поэтому я не могу их перестроить.Как правило, это происходит потому, что vs предполагает (и, вероятно, справедливо), что библиотека BuildSupport довольно статична и не использует
Какой хороший способ автоматизации такого процесса, как этот?У меня есть только некоторые предварительные мысли прямо сейчас, но единственное, о чем я могу думать, - это создание полностью отдельного исполняемого файла, который будет запускаться msbuild (видел задачу, чтобы сделать эквивалент этого, не может найти ее сейчас), или что-то более сложноезадействовать отдельный домен приложения и вручную вызвать функцию через отражение.Но прежде чем идти дальше по этому пути, я упускаю что-то более простое и более очевидное?