引用System本身和System以及project.config和csproj文件中的System.Xml.Linq之间的区别

时间:2017-11-30 20:02:06

标签: c# visual-studio nuget csproj

在我的System文件中引用.csproj与引用SystemSystem.XmlSystem.Xml.Linq之间有什么区别?

一些背景故事: 使用Visual Studio 2017社区15.4.4,我决定升级我的项目正在使用的NuGet包。升级后,我注意到我的packages.config.csproj文件现在包含“额外”条目。  例如,之前我的.csproj文件包含(除其他外)一条简单的行,其中包含:

<Reference Include="System" />, 

但现在,升级后,它们还包括

<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq"/>

同样,我的project.config文件获得了如下条目:

<package id="System.Xml.Linq"... > 

以前确实存在。

创建一个测试解决方案,我编写了一个使用LINQ select语句的小函数,打印了一个位于System.Xml.Linq的枚举,然后手动删除了<Reference Include="System.Xml.Linq"/> in .csproj文件,一切似乎都正常编译。

那么为什么这些额外的条目会自动添加?他们是否有目的?

1 个答案:

答案 0 :(得分:1)

  

为什么会自动添加这些额外的条目?他们是否有目的?

不确定为什么您的packages.config文件包含&#34;额外&#34;条目<package id="System.Xml.Linq"... >,可能会添加错误或添加为某些软件包的依赖项(如果您想深入了解此问题的原因,您应该找出此软件包添加的原因)。

通常,在创建.NET框架项目时,默认情况下会添加以下.NET框架引用:

<Reference Include="System" />
<Reference Include="System.Xml.Linq"/>

然后打开包System.Xml.Linq,你会发现这个包只包含一个.NET framework 2.0 lib:

enter image description here

通过nuget安装此软件包后,以下行将添加到您的项目文件中:

<Reference Include="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\System.Xml.Linq.3.5.21022.801\lib\net20\System.Xml.Linq.dll</HintPath>
  <Private>True</Private>
</Reference>

但是如果我们安装此软件包,则上面的行将替换行<Reference Include="System.Xml.Linq"/>。不知道为什么它不能取代那条线。

这就是为什么你删除System.Xml.Linq文件中对.csproj的引用没有不良影响的原因,Visual Studio仍然从包中获取dll。