2012-08-25 73 views
0

我使用visual studio 2010並試圖使用subsonic,我得到以下錯誤。得到亞音速編譯錯誤

錯誤2編譯轉型:元數據文件 'MySql.Data' 找不到d:\ TradingTools \ CODE \ ConsoleApplication8 \ subsoniccomponents \ Structs.tt 11 backtester

正如你從截圖中可以看到,我在我的引用中有mysql.data。我不知道如何解決這個問題。你能幫助解決這個問題嗎? http://postimage.org/image/s1es0mr79/

回答

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的組件。