.net 为什么有必要添加PCL';将nuget包添加到应用程序项目中?

.net 为什么有必要添加PCL';将nuget包添加到应用程序项目中?,.net,visual-studio-2015,nuget,portable-class-library,.net,Visual Studio 2015,Nuget,Portable Class Library,假设我有一个Visual Studio 2015解决方案,其中包含两个项目,MyApp(.NET)和MyLib(可移植--针对.NET 4.6和UWP 10)。它编译和运行良好 然后我将任何NuGet包添加到MyLib——可以是任何东西,但让我们选择Rx Main作为示例。我在使用Rx类型的MyLib类中添加了一行简单的代码 现在,MyApp将在启动时崩溃,并出现引用nuget包dll的FileNotFoundException。通过将相同的NuGet包添加到MyApp解决了这个问题 为什么还需

假设我有一个Visual Studio 2015解决方案,其中包含两个项目,
MyApp
(.NET)和
MyLib
(可移植--针对.NET 4.6和UWP 10)。它编译和运行良好

然后我将任何NuGet包添加到
MyLib
——可以是任何东西,但让我们选择Rx Main作为示例。我在使用Rx类型的
MyLib
类中添加了一行简单的代码

现在,
MyApp
将在启动时崩溃,并出现引用nuget包dll的FileNotFoundException。通过将相同的NuGet包添加到
MyApp
解决了这个问题

为什么还需要将NuGet包添加到应用程序项目中?

如果
MyLib
是一个普通的.NET项目,则不需要这样做

编辑 需要澄清一下

在标准.NET类库项目中,所有NuGet包都显示为引用下的单个DLL:

它们每个都有十几个可在“属性”窗口中编辑的属性,包括
Copy Local

在PCL项目中,在引用下,NuGet包没有任何属性,也无法将它们复制到输出目录

这种情况至少有两个问题:

  • 它只会在运行时(FileNotFoundException)而不是编译时出现丑陋的头部
  • 现在,该PCL项目的每个客户机都必须处理该PCL的所有依赖项,而以前它是透明的

  • , . 正在执行的应用程序将始终需要能够找到引用的项目引用的程序集(只要使用它们的类型),无论这些引用是项目引用还是程序集引用(后者是否由NuGet管理,都无关紧要)。@CodeCaster,为什么这不是标准.NET库项目的要求?我意识到,对于这些,默认情况下,每个DLL都将其
    Copy Local
    属性设置为
    true
    。。。但是那些蓝色图标NuGet包引用如何实现同样的效果呢?我不知道你在问什么。在运行时,运行时必须能够加载所有必需的程序集。这些是否打包在NuGet包的(依赖项)中并不重要。了解有关崩溃的更多信息,例如异常消息和调用堆栈。这可以说,你解决过这个问题吗?