2013-05-16 16 views
53

VS2010を使用していますが、ローカルハードディスクからいくつかのアセンブリをファイル参照を通じてC#プロジェクトに追加しようとしました。 csprojファイル覗く、私が見つけたは時々ファイル参照は、しかし、時には違いを引き起こす可能性がありますどのようなcsprojアセンブリリファレンスの理解

<Reference Include="name, Version=xxx, Culture=neutral, 
              processorArchitecture=MSIL"> 

として表示されます

<Reference Include="name"> 

として表示されますか?


k3bの回答からインスパイアされ、別のテストを行いました。私は新しいクラスライブラリプロジェクトを作成しました。

  1. ファイル参照を追加します。 初期値プロパティペインはです。 プロパティからペインで

    <Reference Include="Name"> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  2. 変更特定のバージョンようcsprojファイルの外観。 VSはInclude属性のバージョンを追加します。

    <Reference Include="Name, Version=..."> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  3. 変更特定のバージョンでプロパティを再度からペイン。 VSは子要素SpecificVersionを追加します。

    <Reference Include="Name, Version=..."> 
        <HintPath>...</HintPath> 
        <SpecificVersion>False</SpecificVersion> 
    </Reference> 
    

だから、ルールがあるようです:

  • バージョン中に存在する場合属性を含めると何SpecificVersion子要素が存在しない、ファイルアセンブリはなるように構成されています特定のバージョン
  • SpecificVersion子要素には値が追加されます。False

一つのこと、私はまだ理解していない:

  • を私の新しいテストプロジェクトのために、私は、ファイルの参照を削除し、再度それを追加した場合、それがある、ポイント1の形式に戻りデフォルト。
  • ファイル参照を削除して再度追加すると、ポイント3に戻ります。特定のバージョンが使用されていないことを意味しますが、なぜフォーマットに戻っていないのだろうと思います

答えて

26

どの参照型が得られるかは、アセンブリのリンク方法によって異なります。

あなたはブールフラグを見つける

  • は、プロパティ・ページに移動プロジェクト・エクスプローラで、「特定のバージョン」

    • 真の意味を参照アセンブリを選択します。アセンブリはversion = xxxを持たなければならない
    • falseは、アセンブリのバージョンを無視することを意味します。

    (ドイツ語 "Spezifische版" の英語翻訳がわずかに異なっていてもよいので、私はドイツVS2010を有する)

    [更新]

    Iはvcs2010-エクスプレスドイツ

    を使用して、以下を試し

    デフォルトSpecificVersion = Falseのと参照を追加:なしバージョン

    <Reference Include="Castle.Core"> 
        <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath> 
    </Reference> 
    

    修飾Rをリファレンス:SpecificVersion = Falseの

    <Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> 
        <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath> 
    </Reference> 
    
    再び

    修正参照を追加したバージョン:バージョンが残っていると、新しい要素SpecificVersion

    <Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> 
        <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath> 
        <SpecificVersion>False</SpecificVersion> 
    </Reference> 
    

    特定のバージョンを覚えているようだが、ignorede = TrueのSpecificVersionあなたのために<SpecificVersion>False</SpecificVersion>

  • +1

    本当ですか?私のVS2010では、 'SpecificVersion'は要素' Reference'の子です。 Isは ''他には影響を与えません。それ以外の属性は無視されます。 –

    +1

    私はテストをしました。具体的なバージョンは最初はFalseです。私は手動でバージョン情報を削除するためにcsprojファイルを編集しました。それから、Specific VersionをTrueに変更しました。私は、VSがバージョン情報を挿入したことを確認しました。だから、特定のバージョンと何とか関係しているようです。しかし、私はVSがなぜ私の最後の変更を覚えていないのか不思議です。特定のバージョンをFalseにリセットし、アセンブリ参照を削除してreaddしても、バージョン情報は挿入されます。 – intangible02

    +1

    あなたの所見を確認します。それに応じて答えを更新しました。 – k3b