0

Visual Studio 2010 を使用して subsonic を使用しようとすると、次のエラーが発生します。

エラー 2 変換のコンパイル: メタデータ ファイル 'MySql.Data' が見つかりませんでした D:\TradingTools\CODE\ConsoleApplication8\subsoniccomponents\Structs.tt 1 1 バックテスター

スクリーンショットからわかるように、私の参照には 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 に答える