我使用visual studio 2010并试图使用亚音速,我收到以下错误。
错误2编译转换:找不到元数据文件'MySql.Data'D:\ TradingTools \ CODE \ ConsoleApplication8 \ subsoniccomponents \ Structs.tt 1 1 backtester
从截图中可以看出,我的参考资料中确实有mysql.data。我不知道如何解决这个问题。你能帮忙解决这个问题吗? http://postimage.org/image/s1es0mr79/
答案 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组件的干净安装中找到。