在我的System
文件中引用.csproj
与引用System
,System.Xml
和System.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
文件,一切似乎都正常编译。
那么为什么这些额外的条目会自动添加?他们是否有目的?
答案 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:
通过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。