【发布时间】:2018-05-11 07:25:18
【问题描述】:
我想问一个关于 C# 如何链接其依赖关系的问题。
第一种情况: 我有一个链接例如的 C# 项目系统程序集。如果我从 Assembly->Framework 窗口添加引用:
程序集的路径是:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\System.dll
但是如果我启用了 .nuget 并且它已经下载了程序集,系统程序集的链接将神奇地更改为:C:\Users\.nuget\packages\Microsoft.NETCore.Portable.Compatibility \1.0.0\ref\netcore50\System.dll
为什么我说“神奇”是因为我看不到明确表示的地方 - 从现在开始从那个方向进行组装。
第二种情况: 当我下载了 .nuget 程序集后,在“项目参考”窗口中我会看到下一件事:
两个不同版本的程序集链接到我的项目,一个来自.nuget所在的地方,另一个来自.NET Framework所在的地方。问题:会考虑哪一个?两者都有?
不过,只是一个想法。
当我使用 C++ 项目时,一切都非常清晰明了,我可能安装了几个不同的 SDK,但是当我定义 SDK 版本和要使用的工具集时 - 项目将从定义的位置获取程序集。它不会尝试从不同的地方加载东西,除非我指定了。
也许 C# 项目具有类似的配置能力,但我不知道它们。 有人可以帮我理解吗?
更新
刚刚意识到我在这里的陈述:当我下载了 .nuget 程序集后,在项目参考窗口中我看到了下一件事: 可能令人困惑。在我列出的不同程序集版本中添加全屏截图:
【问题讨论】:
-
当您从 nuget 下载内容时,它会更改您的项目文件,并且也可以更改引用(存储在您的项目文件 *.csproj 中)。如果你编辑你的 *.csproj 文件,你可以在那里找到你项目的所有引用。
-
@Andriy 当然会添加,它是不同的框架,如果您正在为边缘创建扩展,为什么要使用 .net 核心?
-
@Andriy 这就是为什么最好通过 nuget(用于 SDK 和扩展)来完成它 - 它将处理与您的项目/解决方案相关的参考路径,并为从事项目/解决方案的每个人重新创建所有内容.只要确保只签入包配置,而不是包内容,就可以了。
-
@Andriy 也尽量不要将这两种语言放在一起比较,c# 完全是另一回事,你应该这样考虑,学习新东西。它与 c++ 相比的优点/缺点只是一个观点,来自任务的要求。例如 c# 中的垃圾收集和 c++ 中的灵活内存管理。
-
我确实认为如果您刚开始使用 C#,这是非常深入的。为什么不直接删除重复的程序集并继续前进?当解决方案非常简单时,感觉就像你在试图理解(复杂的)原因时有点被抓住了。
标签: c# uwp .net-core .net-assembly assemblies