Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解csproj组件参考_C#_Visual Studio 2010_Reference_.net Assembly_Csproj - Fatal编程技术网

C# 理解csproj组件参考

C# 理解csproj组件参考,c#,visual-studio-2010,reference,.net-assembly,csproj,C#,Visual Studio 2010,Reference,.net Assembly,Csproj,我正在使用VS2010,我试图通过文件引用将一些程序集从本地硬盘添加到我的C#项目中。查看csproj文件,我发现有时文件引用显示为 <Reference Include="name"> <Reference Include="name, Version=xxx, Culture=neutral, processorArchitecture=MSIL"> 将“属性”窗格中的特定版本

我正在使用VS2010,我试图通过文件引用将一些程序集从本地硬盘添加到我的C#项目中。查看
csproj
文件,我发现有时文件引用显示为

<Reference Include="name">
<Reference Include="name, Version=xxx, Culture=neutral, 
                                          processorArchitecture=MSIL">
  • 将“属性”窗格中的特定版本更改为True。VS在
    Include
    属性中添加版本

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
  • 因此,规则似乎是:

    • 当Include属性中存在版本并且没有
      SpecificVersion
      子元素时,文件程序集被配置为特定版本
    • SpecificVersion
      子元素仅附加值False
    有一件事我仍然不明白:

    • 对于我的新测试项目,如果我删除文件引用并再次添加它,它将返回到点1中的格式,这是默认值
    • 对于我现有的项目,如果我删除文件引用并再次添加它,我将在第3点中恢复格式。虽然这也意味着没有使用特定的版本,但我想知道为什么它没有回到第1点中的格式

    获得哪种引用类型取决于如何链接程序集

    • 在项目资源管理器中选择引用的程序集
    • 转到属性页
    在这里您可以找到一个布尔标志“特定版本”

    • true表示:程序集的版本必须为xxx
    • false表示:忽略程序集版本
    (我只有德语版vs2010,因此德语版“Spezifische版本”的英文翻译可能略有不同)

    [更新]

    我使用vcs2010 express德语尝试了以下内容

    使用默认SpecificVersion=False添加引用:无版本

    <Reference Include="Castle.Core">
      <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
    </Reference>
    
    
    ..\..\..\lib\fluentNHibernate\Castle.Core.dll
    
    修改的参考: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>
    
    
    ..\..\..\lib\fluentNHibernate\Castle.Core.dll
    
    再次修改引用: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>
    
    
    ..\..\..\lib\fluentNHibernate\Castle.Core.dll
    假的
    

    似乎特定版本已被记住,但由于
    False

    而忽略,您确定吗?在我的VS2010中,
    SpecificVersion
    是元素
    引用的子元素。Is对
    没有影响,其他属性被忽略。我做了一个测试。特定版本最初为False。然后我手动编辑csproj文件以删除版本信息。然后我将特定版本更改为True。我注意到VS插入了版本信息。所以它似乎与特定的版本有某种联系。然而,我现在想知道为什么VS不记得我上次的改变。即使我将特定版本重置为False并删除并读取程序集引用,版本信息仍然插入。我确认您的观察结果。相应地更新了答案。对于依赖于其他项目的项目,我注意到以下内容:“继承的”/“可传递的dll依赖项被引用,版本和特定设置为false,而直接设置的dll依赖项没有任何版本信息。
    <Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
      <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
    </Reference>
    
    <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>