有亚音速编译错误

时间:2012-08-25 02:43:38

标签: subsonic

我使用visual studio 2010并试图使用亚音速,我收到以下错误。

错误2编译转换:找不到元数据文件'MySql.Data'D:\ TradingTools \ CODE \ ConsoleApplication8 \ subsoniccomponents \ Structs.tt 1 1 backtester

从截图中可以看出,我的参考资料中确实有mysql.data。我不知道如何解决这个问题。你能帮忙解决这个问题吗? http://postimage.org/image/s1es0mr79/

1 个答案:

答案 0 :(得分:0)

SubSonic使用DbProviderFactory模式。 DbProviderFactory方法允许创建Connections / Commands / ...而无需了解具体类型。

// without factory
var con = new MySqlConnection();
var cmd = new MySqlCommand();

// with factory
var factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
var con = factory.CreateConnection();
var cmd = factory.CreateCommand();

这是一种更通用的方法。

但是,为了使其正常工作,您必须安装MySql.Data(msi-Package),它在machine.config文件中生成一些条目。

那就是说,

我也更喜欢我的构建环境,不依赖于已安装的软件,这使得在不安装多个依赖项的情况下切换到新机器变得更加容易。

但这需要一点点工作:

修改您的app.config / web.config文件并将其置于<configuration></configuration>

之间
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient"/>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
       description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

我刚从

复制并粘贴了代码段
%windir%\Microsoft.NET\Framework\<version>\Config
安装MSI后

如果您的解决方案有多个项目,您必须为主项目执行此操作(因此亚音速可以在运行时找到您的提供程序)和DAL项目(因此亚音速可以在代码生成期间找到您的提供程序)。

如果您使用其他MySQL版本,则可以更改它。

您要做的第二件事是告诉模板在哪里找到MySql.Data.dll(如果它不在GAC中)。

您可以通过编辑MySQL.ttinclude文件(查看assembly指令)来完成此操作

<#@ include file="Settings.ttinclude" #>
<#@ assembly name="$(SolutionDir)\Dependencies\MySql.Data.dll" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#+

通过这些更改,我的解决方案运行查找和模板生成也可以在没有安装任何MySql组件的干净安装中找到。