Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从.Net 4.0到4.5的重定目标解决方案-如何重定NuGet包的目标?_.net_Nuget_Visual Studio 2012_.net 4.5 - Fatal编程技术网

从.Net 4.0到4.5的重定目标解决方案-如何重定NuGet包的目标?

从.Net 4.0到4.5的重定目标解决方案-如何重定NuGet包的目标?,.net,nuget,visual-studio-2012,.net-4.5,.net,Nuget,Visual Studio 2012,.net 4.5,我已经将目前VS2010中针对.NET 4.0的解决方案迁移到VS2012,现在我想将其重新定位到.NET 4.5 我不确定的是NuGet软件包。例如,我在VS2010中从EF4更新的EF5实际上是EF4.4,您可以在这里看到: <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MS

我已经将目前VS2010中针对.NET 4.0的解决方案迁移到VS2012,现在我想将其重新定位到.NET 4.5

我不确定的是NuGet软件包。例如,我在VS2010中从EF4更新的EF5实际上是EF4.4,您可以在这里看到:

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
    </Reference>

假的
..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll
我还可以在packages.config中看到项目的以下内容:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

所以我的问题是:


将当前设置为target.NET 4.0的所有NuGet软件包重新设置为target.NET 4.5的最佳做法是什么?

NuGet 2.1提供了一个功能,可以简化这一过程:只需从package Manager控制台执行
更新软件包-重新安装-忽略依赖项即可

NuGet 2.0无法很好地处理重新定位应用程序的问题。要更改软件包的目标框架,必须卸载并重新安装软件包(注意已安装的软件包,以便可以重新安装每个软件包)

必须卸载和重新安装软件包的原因是:

  • 安装包时,我们确定项目的目标框架
  • 然后将其与包内容匹配,找到适当的\lib\文件夹(和\content\文件夹)
  • 程序集引用是通过指向包的\lib\文件夹的提示路径添加的,其中包含正确的子文件夹(\lib\net40为例)
  • 内容文件是从packages\Content\文件夹复制的,其子文件夹为右(\Content\net40为例)
  • 我们在packages.config文件中记录用于安装包的targetFramework
  • 更改项目的目标框架后,提示路径仍然指向net40
  • 卸载包时,我们会检查packages.config中记录的targetFramework,以查看要从项目中删除的目标framework的libs/内容
  • 当您重新安装包时,我们会检测到您更新的目标框架,并引用/复制正确的libs/内容

对于<>代码>更新包-重新安装< /COD>命令的问题,请考虑使用<代码> -IGORIONEngurials标志来运行它,像这样:

update-package -reinstall <packagename> -ignoreDependencies
更新包-重新安装-忽略依赖项
此标志将保留您的包依赖项,否则即使您最初希望重新安装的包仍保持其版本不变,它们也可能会得到更新


更多信息。

在尝试在解决方案范围内重新安装软件包时,我遇到了一个依赖项错误(尽管使用了
-ignoreDependencies
标志),并且每个项目的所有packages.config文件都已被删除。在VS2013中,在所有升级的依赖项/引用重新连接到项目之前,packages.config似乎不会被刷新回磁盘并重新添加

在我的例子中,有效的方法是通过将
-ProjectName
ProjectName添加到
updatepackage
命令一次升级每个项目。在这种情况下,packages.config会随着每个项目的升级而更新


对于非常大的解决方案来说可能并不实用,但对于尽可能多的项目来说,仍然利用自动升级并隔离有问题的项目似乎是一种合理的折衷办法,而不会在失败时删除解决方案中的每个packages.config。

在尝试接受的答案失败后,我希望建议使用风险较小的命令:

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies
更新包-项目名称-重新安装-忽略依赖项
有关更多信息:

使用Visual Studio for Mac 2019,右键单击软件包文件夹将在菜单中显示“重定目标”选项。这解决了项目中所有需要重定目标的包的重定目标问题。看起来在Visual Studio for Mac的“工具”菜单下没有NuGet Package Manager(至少在我的版本中是这样),所以我无法启动Package Manager控制台


将VS 2012与ASP.NET MVC 4项目一起使用,并在将.NET Framework从4.0重新定位到4.5之后,我在package Manager控制台中执行了
更新包-重新安装
。所有软件包都开始卸载和更新,Windows 8突然重新启动,当它返回时,它告诉“您的电脑出现问题并重新启动。是否要向Microsoft发送信息?”:(吓人的是…顺便说一下,这是我现在安装的NuGet版本:
2.2.40116.9051
在这里打开了一个问题:重新安装选项从未对我起过作用。它要么以错误的顺序删除,要么在“无法删除X,因为Y依赖于它”上出现错误或者有时只是不读取包。上次我尝试它时,它删除了EntityFramework,然后再也没有重新添加它。更新包-重新安装对我来说不是一个解决方案。它还更新了很多包,而不是将它们保留在我们使用和测试过的版本上。例如,Ninject被升级到v3,这是一个突破性的版本n更改。甚至不要尝试更新页面-重新安装。这件事在我的本地计算机上运行时非常混乱,我不得不阻止NuGet Package manager继续。出于某种原因,它删除了我的jQuery 1.10版本,并将其替换为1.4.4。只需手动执行,省去了麻烦。同意混乱的事情,这就是e从这篇文章开始已经两年了。它发现了某些Nuget的较低版本,并弄乱了很多参考资料。这是经过近两个小时的更新后(在2014年初的高端工作站上)解决方案中的.20个项目。谢谢,这真的节省了很多麻烦。看着Nuget尝试重新安装EnterpriseLibrary在30多个项目上创建的10个左右的依赖项,这将导致一天的工作。这将使它缩短到几分钟。正如其他人提到的,很可能会中断