【发布时间】:2018-03-29 22:03:08
【问题描述】:
它始于一个开发人员需要解决一些版本控制问题。他更改了标准定义中的一些System.xxx 引用,现在指向“包”文件夹。我们使用 FW 4.7.1,这是 Web Api 项目。
<Reference Include="System.Runtime">
<HintPath>..\..\..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
</Reference>
通常这样的引用以这种形式出现
<Reference Include="System.Runtime" />
问题:参考旁边的黄色警告标志。查看属性窗口 - 未找到任何信息。但是,项目编译。显然,针对其他一些 DLL,而不是来自 hintPath 的 DLL。问题是,即使它编译,它也不会将 DLL 复制到 bin 并且应用程序无法运行。
这是环境问题,因为我们有 2 台 Server 2016 机器正在运行。 1 Win10 也是如此。但是其他Win10机器就不行了。
我想使用 MsBuild 来查看是否可以正确构建。但是无论是 MsBuild 还是 Devenv 命令行都没有工作。这表明该问题对于特定的操作系统和 VS 安装更为普遍。它编译的原因是因为 Devenv 和 MsBuild 擅长遍历 GAC 和目录,直到找到合适的 DLL。
【问题讨论】:
-
System.Runtime是一个框架程序集,.NET Framework 的框架程序集不是来自包,因此您有 2 个对System.Runtime的引用,具有不同的版本。不应在项目文件中手动拉取框架程序集,它们会由构建目标自动拉取。您真的需要该框架程序集的不同版本吗? -
@JoséPedro Jose,您应该在发表此类声明之前进行研究。看这里nuget.org/packages/System.Runtime。不,我两者都没有。仅包版本 4.3.0。我认为,这现在是转向 .net 标准的一部分。这个包派生的 system.runtime 对 fw4.7.1 和 .net core2.0 都有好处。它取代了仅固件版本。同样,相同的项目适用于其他机器。我不明白我缺少什么。
-
您可能会尝试使用 MSBuild 诊断日志记录来检查在编译时如何解析引用。这可能会给你更多的提示,而不仅仅是 VS 中的黄色箭头。
-
@T.S.,你的目标框架版本是什么,.net 4.7.1?你的项目类型是什么?确实,4.7.1 中存在一个错误——它附带了错误的组件版本,但它仍然需要其中一些组件 system.* 作为间隔。 github.com/dotnet/standard/issues/567
-
@LeoLiu-MSFT 是 4.7.1。这是 web api FW web 项目。好吧,它适用于 2 台服务器 '16 和 2 台 win10 机器。我注意到一件事。我的 VS 是 15.6,它工作的机器不迟于 15.4。那么,最新的更新会破坏它吗?明天又有一个“破家伙”会报告他的VS版本。走着瞧。谢谢
标签: .net reference visual-studio-2017 nuget-package