0

我使用 Visual Studio 2010 并尝试使用亚音速,但出现以下错误。

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

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

4

1 回答 1

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 后。

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

如果你使用另一个 MySQL 版本,你可以改变它。

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

您可以通过编辑MySQL.ttinclude文件来做到这一点(查看assembly指令)

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

通过这些更改,我的解决方案运行 find 并且模板生成也可以在没有安装任何 MySql 组件的全新安装上运行。

于 2012-09-07T12:34:21.347 回答