2012-08-25 2 views
0

J'utilise Visual Studio 2010 et essayé d'utiliser Subsonic et je reçois l'erreur suivante.obtenu subsonic erreur de compilation

Erreur 2 transformation Compiler: Fichier de métadonnées 'MySql.Data' n'a pas été trouvé D: \ TradingTools \ CODE \ ConsoleApplication8 \ subsoniccomponents \ Structs.tt 1 1 backtester

Comme vous pouvez le voir sur la capture d'écran, i J'ai mysql.data dans mes références. Je ne sais pas comment résoudre ce problème. Pouvez-vous aider à résoudre ce problème. http://postimage.org/image/s1es0mr79/

Répondre

0

SubSonic utilise le modèle DbProviderFactory. L'approche DbProviderFactory permet la création de Connections/Commands/... sans connaître le type concret.

// 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(); 

qui est une approche plus générique. Cependant, pour que cela fonctionne, vous devez installer MySql.Data (le msi-Package) qui crée des entrées dans le fichier machine.config.

Cela dit,

Je préfère aussi mon environnement de construction ne pas compter sur les logiciels installés, ce qui le rend beaucoup plus facile de passer à une nouvelle machine sans installer plusieurs dépendances.

Mais cela nécessite un peu de travail de bits:

Modifier votre app.config/fichier web.config et placez quelque part entre ce <configuration> et </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> 

Je viens de copier et collé l'extrait de

%windir%\Microsoft.NET\Framework\<version>\Config 

après l'installation du MSI. Si votre solution a plusieurs projets, vous devez le faire pour le projet principal (afin que subsonic puisse trouver votre fournisseur au moment de l'exécution) et dans votre projet DAL (afin que subsonic puisse trouver votre fournisseur pendant la génération de code).

Si vous utilisez une autre version de MySQL, vous pouvez changer cela. La deuxième chose que vous avez à faire est de dire aux templates où trouver MySql.Data.dll (si ce n'est pas dans le GAC).

Vous pouvez le faire en éditant le fichier MySQL.ttinclude (regardez la directive assembly)

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

Avec ces changements ma solution va trouver et génération de modèle fonctionne également trouver sur une installation propre, sans composants MySql installé.