2011-09-19 6 views
0

je la cible NANT CSC suivante pour la construction winexe:Échec de compilation NANT CSC: références manquant?

<csc target="winexe" output="${Deploy.dir}\VMIS.exe" debug="${debug}"> 
    <sources> 
    <include name="${App.dir}\**\*.cs" /> 
    <include name="${Build.dir}\AssemblyInfo.cs" /> 
    <exclude name="${App.dir}\**\AssemblyInfo.cs" /> 
    </sources> 
    <references refid="Lib.fileset"> 
    </references> 
    ... 
</csc> 

Ce qui suit est le message d'erreur:

D:\..\myClass.cs(9,17): error CS0234: The type or namespace name 'Reporting' 
    does not exist in the namespace 'Microsoft' (are you missing an assembly 
    reference?) 

En myClass.cs, j'ai cette référence à l'aide:

using Microsoft.ReportViewer.WinForms; 

Il n'y a pas de problème pour créer mon application dans VS, mais je ne pouvais pas construire à partir de NANT. Je pense que je pourrais manquer la référence à Microsoft.ReportViewer.WinForms.dll dans NANT build. Vous ne savez pas comment je peux inclure cette DLL dans ma corbeille pour NANT?

J'ai essayé de modifier les références cibles csc:

<csc ...> 
    ... 
    <references refid="Lib.fileset"> 
    <include name="Microsoft.ReportViewer.Common.dll" /> 
    <include name="Microsoft.ReportViewer.WinForms.dll" /> 
    </references> 
    ... 
</csc> 

ne fonctionne toujours pas. Dois-je utiliser COPY target pour copier tous les fichiers dll de bin vers $ (build.dir)?

Mises à jour: J'ai trouvé que ces fichiers Microsoft.ReportViewer.xx.dll dans les références de projet ne sont pas copiés en local. Comment puis-je simuler copier en local dans NANT pour ces deux fichiers dll? Je suppose que cela peut résoudre le problème puisque NANT est une application de construction dans la console et n'a pas de connaissances sur les références dans le cache global.

Répondre

3

Recommandé:

  • Utilisez MSBuild dans votre pour créer votre application de script NAnt (s).

    FYI: Visual Studio utilise MSBuild pour compiler et construire votre solution et vos projets.

    <!-- Verify the right target framework --> 
    <property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" />  
    <target name="Build"> 
        <exec program="${MSBuildPath}"> 
         <arg line='"${SolutionFile}"' /> 
         <arg value="/target:Rebuild" /> 
         <arg value="/verbosity:normal" /> 
         <arg value="/nologo" /> 
        </exec> 
    </target> 
    

Possibilité:

  • Copier références/fichiers localement (à savoir en utilisant la tâche de copie). Ou utilisez de la même manière les chemins complets dans le nom d'inclusion.

Non recommandé:

  • tâche "solution" Utilisons NAnt, ou la tâche "msbuild" de NAntContrib. Cela simplifierait l'appel de msbuild mais vous relierait aux anciennes versions des fichiers de solution/projet msbuild/VS. Les nouveaux fichiers solution/projet VS ne seraient pas supportés facilement.

Espérons que cela aide.

+0

Qu'en est-il du fichier info d'assemblage? qui est partagé – dekdev

4

NAnt est configuré avec l'ensemble de DLL par défaut pour l'infrastructure .NET et sait où résident ces DLL (par exemple C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319).Lorsque vous incluez des ensembles non-cadres, que ce soit le vôtre ou une 3ème partie, vous pouvez les inclure, mais utilisez le chemin complet de la DLL:

<include name="C:\Common\ThirdParty.dll" /> 

Vous pouvez également utiliser des variables:

<property name="common.directory" value="C:\Common" /> 
... 
<csc ...> 
    ... 
    <references> 
     <inclde name="${common.directory}\ThirdParty.dll" /> 
    </references> 
</csc> 
Questions connexes