2012-04-04 10 views
0

私はこのNAntのことにほとんど亀裂を生じました。私が言うことができるのは、コンパイルに関しては、Visual Studioがカバーの背後に隠されていることです。私はVB.NETアプリはNAntのを経由して、今、正常にコンパイルしていNAntリソースのリンク/構築

は、しかし、それはエラーを思い付く、実行されません:私はコンパイルおよびVisual Studioで実行すると

Could not find any resources appropriate for the specified culture or the neutral culture. 
Make sure "APP3.Resource.resources" was correctly embedded or linked into assembly "APP3" at compile time, or that all the satellite assemblies required are loadable and fully signed. 

それはすべて正常に動作します。

ビルドファイルには、コンパイルされているすべてのプロジェクトのすべての.resxファイルが含まれており、NAntビルドプロセス中にエラーは発生しません。

任意のアイデアは

ああ:-)いただければ幸いです、と私は私のEXEが6キロバイト小さいので、何かが明らかに不足している、とNAntのプロセスはいずれかのマニフェストファイルを作成していないようだ、またはすべてのことに気づきますXMLファイルは、私はそれが正常だと仮定しますか?

<?xml version="1.0"?> 
<project name="APP3" default="build" basedir="..\"> 
<description>APP3 build</description> 
<property name="nant.settings.currentframework" value="net-3.5" /> 
<property name="projectversion" value="3.8.0" /> 
<property name="project.config" value="debug" /> 

<target name="init"> 
    <call target="${project.config}" /> 
</target> 

<target name="debug"> 
    <property name="project.config" value="debug" /> 
    <property name="build.debug" value="true" /> 
    <property name="basedir.suffix" value="-debug" /> 
</target> 

<target name="release"> 
    <property name="project.config" value="release" /> 
    <property name="build.debug" value="false" /> 
    <property name="basedir.suffix" value="-release" /> 
</target> 

<target name="clean"> 
    <delete file="${project::get-base-directory()}${project::get-name()}_${projectversion}${basedir.suffix}\APP3_DataClasses.dll" failonerror="false" /> 
    <delete file="${project::get-base-directory()}${project::get-name()}_${projectversion}${basedir.suffix}\classUtilities.dll" failonerror="false" /> 
    <delete file="${project::get-base-directory()}${project::get-name()}_${projectversion}${basedir.suffix}\APP3.exe" failonerror="false" /> 
</target> 

<target name="build-classutilities" depends="init, clean" description="compiles the  APP3 utilities class"> 
    <property name="build.dir" value="${project::get-base-directory()}/${project::get-name()}_${projectversion}${basedir.suffix}"/> 
    <mkdir dir="${build.dir}" /> 
    <vbc target="library" output="${build.dir}/classUtilities.dll" debug="${build.debug}" rootnamespace="classUtilities"> 
     <imports> 
      <import namespace="Microsoft.VisualBasic" /> 
      <import namespace="System" /> 
      <import namespace="System.Collections" /> 
      <import namespace="System.Collections.Generic" /> 
      <import namespace="System.Data" /> 
      <import namespace="System.Diagnostics" /> 
      <import namespace="System.Linq" /> 
      <import namespace="System.Xml.Linq" /> 
     </imports> 
     <sources> 
      <include name="${project::get-base-directory()}/classUtilities/Utilities.vb" /> 
     </sources> 
     <resources> 
      <include name="${project::get-base-directory()}/classUtilities/*.resx" /> 
      <include name="${project::get-base-directory()}/classUtilities/My Project/*.resx" /> 
     </resources> 
     <references> 
      <include name="System.dll" /> 
      <include name="System.Data.dll" /> 
      <include name="System.Core.dll" /> 
      <include name="System.Xml.dll" /> 
      <include name="System.Xml.Linq.dll" /> 
     </references> 
    </vbc> 
</target> 

<target name="build-dataclasses" depends="build-classutilities" description="compiles the APP3 data classes"> 
    <property name="build.dir" value="${project::get-base-directory()}/${project::get-name()}_${projectversion}${basedir.suffix}"/> 
    <mkdir dir="${build.dir}" /> 
    <vbc target="library" output="${build.dir}/APP3_DataClasses.dll" debug="${build.debug}" rootnamespace="APP3_DataClasses"> 
     <imports> 
      <import namespace="Microsoft.VisualBasic" /> 
      <import namespace="System" /> 
      <import namespace="System.Collections" /> 
      <import namespace="System.Collections.Generic" /> 
      <import namespace="System.Configuration" /> 
      <import namespace="System.Data" /> 
      <import namespace="System.Diagnostics" /> 
      <import namespace="System.Xml" /> 
      <import namespace="System.Xml.Linq" /> 
      <import namespace="Iesi.Collections" /> 
     </imports> 
     <sources> 
      <include name="${project::get-base-directory()}/APP3_DataClasses/**/*.vb" /> 
     </sources> 
     <resources prefix="APP3_DataClasses"> 
      <include name="${project::get-base-directory()}/APP3_DataClasses/*.resx" /> 
      <include name="${project::get-base-directory()}/APP3_DataClasses/My Project/*.resx" /> 
      <include name="${project::get-base-directory()}/APP3_DataClasses/*.hbm.xml" /> 
     </resources> 
     <references> 
      <include name="System.dll" /> 
      <include name="System.Core.dll" /> 
      <include name="System.Xml.dll" /> 
      <include name="System.Xml.Linq.dll" /> 
      <include name="C:\Dev\NHibernate-2.1.2\Required_Bins\Iesi.Collections.dll" /> 
     </references> 
    </vbc> 
</target> 

<target name="build" description="compiles the source code" depends="build-dataclasses"> 
    <property name="build.dir" value="${project::get-base-directory()}/${project::get-name()}_${projectversion}${basedir.suffix}"/> 
    <mkdir dir="${build.dir}" /> 
    <copy file="C:\Dev\NHibernate-2.1.2\Required_Bins\NHibernate.dll" tofile="${build.dir}/NHibernate.dll" /> 
    <copy file="C:\Dev\NHibernate-2.1.2\Required_Bins\Iesi.Collections.dll" tofile="${build.dir}/Iesi.Collections.dll" /> 
    <copy file="C:\Dev\NHibernate-2.1.2\Required_Bins\log4net.dll" tofile="${build.dir}/log4net.dll" /> 
    <copy file="${project::get-base-directory()}/APP3/hibernate.cfg.xml" tofile="${build.dir}/hibernate.cfg.xml" /> 
    <copy file="C:\Dev\LumenWorks.Framework\LumenWorks.Framework.3.8.0\LumenWorks.Framework.IO.dll" tofile="${build.dir}/LumenWorks.Framework.IO.dll" /> 
    <copy file="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dll" tofile="${build.dir}/Microsoft.Office.Interop.Word.dll" /> 
    <copy file="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\office.dll" tofile="${build.dir}/office.dll" /> 
    <copy file="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.Vbe.Interop.dll" tofile="${build.dir}/Microsoft.Vbe.Interop.dll" /> 
    <copy file="${project::get-base-directory()}/APP3/app.config" tofile="${build.dir}/APP3.exe.config" /> 
    <copy todir="${build.dir}"> 
     <fileset basedir="C:\Dev\NHibernate-2.1.2\Required_For_LazyLoading\Castle\"> 
      <include name="*.dll" /> 
     </fileset> 
    </copy> 
    <vbc target="winexe" output="${build.dir}/APP3.exe" debug="${build.debug}" rootnamespace="APP3"> 
     <imports> 
      <import namespace="Microsoft.VisualBasic" /> 
      <import namespace="System" /> 
      <import namespace="System.Collections" /> 
      <import namespace="System.Collections.Generic" /> 
      <import namespace="System.Configuration" /> 
      <import namespace="System.Data" /> 
      <import namespace="System.Data.SqlClient" /> 
      <import namespace="System.Diagnostics" /> 
      <import namespace="System.Drawing" /> 
      <import namespace="System.Windows.Forms" /> 
      <import namespace="System.IO" /> 
      <import namespace="System.Xml" /> 
     </imports> 
     <sources> 
      <include name="${project::get-base-directory()}/${project::get-name()}/*.vb" /> 
      <include name="${project::get-base-directory()}/${project::get-name()}/classes/*.vb" /> 
      <include name="${project::get-base-directory()}/${project::get-name()}/historical/*.vb" /> 
      <include name="${project::get-base-directory()}/${project::get-name()}/Modules/*.vb" /> 
      <include name="${project::get-base-directory()}/${project::get-name()}/My Project/*.vb" /> 
     </sources> 
     <resources prefix="APP3" dynamicprefix="true"> 
      <include name="${project::get-base-directory()}/${project::get-name()}/*.resx" /> 
      <include name="${project::get-base-directory()}/${project::get-name()}/My Project/*.resx" /> 
     </resources> 
     <references> 
      <include name="Microsoft.VisualBasic.dll" /> 
      <include name="System.dll" /> 
      <include name="System.Data.dll" /> 
      <include name="System.Windows.Forms.dll" /> 
      <include name="System.configuration.dll" /> 
      <include name="System.Drawing.dll" /> 
      <include name="${build.dir}/APP3_DataClasses.dll" /> 
      <include name="${build.dir}/classUtilities.dll" /> 
      <include name="System.Xml.dll" /> 
      <include name="C:\Dev\NHibernate-2.1.2\Required_Bins\Iesi.Collections.dll" /> 
      <include name="C:\Dev\NHibernate-2.1.2\Required_Bins\NHibernate.dll" /> 
      <include name="C:\Dev\NHibernate-2.1.2\Required_Bins\log4net.dll" /> 
      <include name="C:\Dev\LumenWorks.Framework\LumenWorks.Framework.3.8.0\LumenWorks.Framework.IO.dll" /> 
      <include name="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dll" /> 
     </references> 
    </vbc> 
</target> 

+0

好奇心ではなく、より良いコンテキストのために:なぜNAntでビルドする必要がありますか?現在NAntでカスタマイズしたいものは、MSbuildでも実行できます。これは、コマンドラインツールに加えてVSから直接実行できるビルドを取得します。 – skolima

+0

良い質問です。正直言って、新しいCIサーバー(Atlassian Bamboo)でコンパイルするものが必要です。これは、NAntとMSBuildの両方を参照してください。 MSBuildがそのシナリオで働く方が簡単な場合、CIサーバーにはどのタイプのVSもインストールされていないので、.NETフレームワークだけです。 DLLへの参照パスを取得しないという点で、.NET 2.0のmsbuildではこれまで問題が発生していましたが、これは克服できる場合は問題ありません。 – Dominik

+0

MSBuildは3.5および4.0リリースで大幅に改善されました。4.0は最終的にNAntで機能パリティを取得しました。また、通常の.Net Frameworkインストールと一緒にインストールされます。 – skolima

答えて

0

私は同じ問題に直面して、私はプログラムはVS、リソースファイルのプロパティ\リソースからコンパイルされたときにことを発見したプログラム.NETリフレクターとアセンブリの各々をテストアセンブリ内の.resxの名前はです。appName.Properties.Resources.resourcesです。あなたは、アセンブリリソースファイルにNANT

<resources> 
    <include name="${proj_dir}/Properties/Resources.resx"/> 
</ resources> 

を使用する場合は名前Resources.resourcesを持っています。

私はこの問題を次のように解決しました。

<target name="example"> 
    <copy file="${proj_dir}/Properties/Resources.resx" tofile="${proj_dir}/Properties/appName.Properties.Resources.resx"/> 
    <csc target="winexe" output="${bin_dir}/appName.exe"> 
     <sources> 
      <include name="${proj_dir}/*.cs"/> 
      <include name="${proj_dir}/Properties/*.cs"/>       
     </sources> 
      <resources> 
      <include name="${proj_dir}/Properties/appName.Properties.Resources.resx"/> 
     </resources> 
    </csc> 
    <delete file="${proj_dir}/Properties/appName.Properties.Resources.resx"/> 
</target> 
+0

偉大な答え!探している人は、https://support.microsoft.com/en-us/kb/839861で見つけました。Resgen.exeを実行すると、ファイルを変換するときに出力ファイルのファイル名を指定しないと、 XMLベースのリソース形式(.resx)ファイルを.resourcesファイルにコピーすると、Resgen.exeは入力ファイルと同じファイル名を持つ.resourcesファイルを作成します。XMLベースのリソース形式ファイルのファイル名がアプリケーションの名前空間名で始まらない場合、.resourcesファイルのファイル名にはこの名前空間名も含まれません。 – clairestreb

関連する問題