设置NAnt& FluentMigrator

时间:2012-11-25 04:26:10

标签: nant fluent-migrator

我有一个包含大量迁移的项目。我可以使用migrator.exe手动运行它,但是我很难让它与NAnt一起工作,我更喜欢。

我有一个* .build文件,其中包含以下内容:

<project name="Migrations" xmlns="http://nant.sf.net/release/0.85/nant.xsd" default="migrate">
    <loadtasks assembly="../packages/FluentMigrator.1.0.3.0/tools/FluentMigrator.NAnt.dll" />    
    <target name="migrate" description="Migrate the database">
        <property name="version" value="-1" overwrite="false" />
        <migrate
              provider="sqlserver2008"
          connectionstring="data source=*********; Initial Catalog=*****;User Id=*******; Password=********;"
          target="./Migrations/bin/Debug/Migrations.dll"
              directory="Migrations"
          task="migrate"
              to="${version}" />
    </target>
</project>

运行时,我得到以下输出: 建立失败

C:\projects\ThisProject\Migrations\migrations.build(3,3):
Failure scanning "C:\projects\packages\FluentMigrator.1.0.3.0\tools\FluentMigrator.NAnt.dll" for extensions.
    Could not load file or assembly 'file:///C:\projects\packages\FluentMigrator.1.0.3.0\tools\FluentMigrator.NAnt.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.

我去寻找depends.exe,但该网站似乎失败,有关如何使这个工作的任何想法?如果我做错了,我会对这里有全新的想法。

======已针对完整解决方案进行了更新======

主席和armen.shimoon正在回答他们的问题。

第一步,我将我的FluentMigrator和FluentMigrator.Tools更新为1.0.5.0。这些工具仍然是1.0.3.0。

第二步是更新我的构建文件以引用.NET 4.0 dll。两者的结合解决了这个问题,但在引用.NET 4.0 dll之前它没有显示出改进。

这是我当前的.build文件供将来参考:

<project name="Migrations" xmlns="http://nant.sf.net/release/0.85/nant.xsd" default="migrate">
    <loadtasks assembly="../packages/FluentMigrator.Tools.1.0.5.0/tools/anycpu/40/FluentMigrator.Nant.dll" />
    <target name="migrate" description="Migrate the database">
      <property name="version" value="-1" overwrite="false" />
        <migrate
              database="sqlserver2008"
          connection="data source=******; Initial Catalog=*****;User Id=*****; Password=*****;"
          target="../Migrations/bin/Debug/Migrations.dll"
          verbose="true"
          />
    </target>
</project>

2 个答案:

答案 0 :(得分:1)

我的第一个猜测是,你的NAnt和FluentMigrator版本可能已经不同步了。所以我的建议是获得NAnt 0.92(因为我喜欢Chocolatey:Get it via Chocolatey),FluentMigrator 1.0.5.0FluentMigrator Tools 1.0.5.0。也许这已经解决了你的问题

答案 1 :(得分:1)

最可能的原因是NAnt在x86下运行,而您的FluentMigrator DLL在x64中运行。

编辑:另一种可能性是.NET目标框架版本。如果您的NAnt二进制文件在.NET 3.5中,而FluentMigrator是.NET 4.0,则无法正确加载它。