web-dev-qa-db-ja.com

csprojアセンブリリファレンスについて

VS2010を使用しており、ファイル参照を介してローカルハードディスクからC#プロジェクトにいくつかのアセンブリを追加しようとしました。 csprojファイルを覗いてみると、ファイル参照が次のように表示されることがあります。

<Reference Include="name">

しかし、時々それは

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

違いの原因は何ですか?


K3bの答えに触発されて、別のテストを行いました。新しいクラスライブラリプロジェクトを作成しました。

  1. ファイル参照を追加します。 特定のバージョン in Propertiesペインの初期値はFalseです。 csprojファイルは次のようになります

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
  2. プロパティペインの特定のバージョンTrueに変更します。 VSは、Include属性にバージョンを追加します。

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
  3. 特定のバージョン in PropertiesペインをFalseに再度変更します。 VSは子要素SpecificVersionを追加します。

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

そのため、ルールは次のようになります。

  • Include属性にVersionが存在し、SpecificVersion子要素がない場合、ファイルアセンブリは特定のバージョンに設定されます
  • SpecificVersion子要素には、値Falseのみが追加されます。

私がまだ理解していないこと:

  • 新しいテストプロジェクトの場合、ファイル参照を削除して再度追加すると、デフォルトのポイント1の形式に戻ります。
  • 既存のプロジェクトの場合、ファイル参照を削除して再度追加すると、ポイント3の形式に戻ります。また、特定のバージョンが使用されていないことを意味しますが、なぜポイント1の形式に戻らないのか疑問に思います。
61
intangible02

どの参照タイプを取得するかは、アセンブリのリンク方法によって異なります。

  • プロジェクトエクスプローラーで参照されているアセンブリを選択します
  • プロパティページに移動します

ブールフラグ「特定のバージョン」があります

  • trueは、アセンブリにversion = xxxが必要であることを意味します
  • falseは、アセンブリバージョンを無視することを意味します

(私はgerman-vs2010しか持っていないので、ドイツ語の "Spezifischeバージョン"の英語の翻訳は若干異なる場合があります)

[更新]

Vcs2010-expressドイツ語を使用して以下を試しました

default SpecificVersion = Falseで参照を追加:バージョンなし

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

変更された参照:SpecificVersion = True:追加されたバージョン

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

変更された参照:SpecificVersion = False:バージョンは残り、新しい要素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>

特定のバージョンは記憶されているようですが、<SpecificVersion>False</SpecificVersion>

29
k3b