我们正在将包管理从手动更新文件转移到NuGet.我正在尝试安装旧版本的软件包以匹配我们在源代码管理中已有的软件包.没有办法从UI执行此操作,因此我使用命令行来获取正确的版本.
出于某种原因,Install-Package继续告诉我nuget画廊无法访问.
nuget.org [ https://www.nuget.org/api/v2/]的来源无法访问.回到NuGet本地缓存
这只发生在我们的一个解决方案中.如果我在同一个存储库中创建新解决方案或使用另一个解决方案,则将按预期安装包.我甚至可以在虚拟解决方案中安装软件包以填充本地缓存,然后在故障解决方案中成功安装它们.我试过Invoke-WebRequest从NuGet控制台获取URL,我得到了一个HTTP 200.
是什么导致这个?有没有办法在每个解决方案/项目的基础上覆盖包源?
假设我有一个包含3个项目的解决方案:
我使用的一些NuGet包将适用于所有3个项目.有些只适用于UI和测试,有些只适用于测试(如NUnit).
使用NuGet进行设置的正确方法是什么?
在任何一种情况下,我应该有多少个packages.config文件?
我使用'Enable NuGet Package Restore'将最近的nuget包恢复功能添加到解决方案中:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
然而,它打破了我的构建服务器,我没有时间来修复它,所以我想删除它.据我所知,没有选项,所以我从所有*.csproj文件中手动删除了以下行:
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
Run Code Online (Sandbox Code Playgroud)
现在的问题是,每次检查我的*.csproj文件或打开我的解决方案时,该行会自动再次添加,如果我不小心检查它就会破坏我的构建:(
我有什么想法可以永久删除它吗?
更新:尽管下面的答案仍然在打开解决方案时仍然会回来,任何有同样问题的人?
不是showstopper但是在项目中使用nuget时,它会创建一个具有此形状的packages.config文件
<?xml version="1.0" encoding="utf-8"?>
<packages>
... your packages
</packages>
Run Code Online (Sandbox Code Playgroud)
这会在VS中发出警告
The 'packages' element is not declared.
Run Code Online (Sandbox Code Playgroud)
问题的起源与我猜的xml声明有关.
另外我认为默认定义包不应该抛出警告.
有谁知道我应该改变它,所以我没有得到这个警告?(即使我只有在文件打开时才能看到它,它也会随着某些CA规则不断显示警告.)
我如何下载NuGet包?我没有NuGet Visual Studio扩展或命令行程序nuget.exe.如何从网上下载.nupack文件?据我所知,我将能够从中提取.dll文件(使用7-zip)以正常使用.
我碰巧感兴趣的包是http://nuget.org/packages/Microsoft.Bcl.Async,但我想知道如何做到这一点一般.
在Ruby世界中,这很容易 - RubyGems网站上的每个包页都有一个.gem文件的下载链接,例如:https://rubygems.org/gems/pony
关于NuGet明显命运的论点属于其他地方.这个问题无关紧要,为什么我避开它.我不是唯一一个.
不知何故,在升级到VS2012和.NET 4.5期间,我设法让NuGet感到困惑.包管理器(以及包文件夹)中出现了一些我无法删除的包(我相信它们是旧的ASP.NET NuGet包,它们已被新版本的新包名替换.它们每个都只有一个Manage 按钮- 但没有卸载按钮.当你想看看它们的使用位置时,你可以看到它们没有被解决方案的项目引用?它们没有显示卸载?
我一直在使用NuGet从外部和内部包源中检索包,这非常方便.但我已经意识到默认情况下每个解决方案都存储了这些包,当一些具有NuGet引用的项目包含在多个解决方案中时,这非常令人沮丧.然后将引用更改为其他解决方案包文件夹,这可能实际上对另一个开发人员或构建计算机不可用.
我已经看到有一些方法可以指出一个公共的包位置(可能在项目根级别,我们正在使用TFS源代码控制)和NuGet的2.1 版本,请参阅发行说明.我正在使用NuGet v2.7
但我试图添加nuget.config文件,但没有看到任何影响.包仍存储在解决方案文件夹中.有什么我错过了吗?似乎有不同的xml节点结构要添加到nuget.config文件中,具体取决于谁回答了这个问题:Schwarzie建议另一个Stackoverflow线程:
<settings>
<repositoryPath>..\..\[relative or absolute path]</repositoryPath>
</settings>
Run Code Online (Sandbox Code Playgroud)
NuGet 2.1的发行说明(见上面的链接)表明了这种格式:
<configuration>
<config>
<add key="repositoryPath" value="..\..\[relative or absolute path]" />
</config>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我不知道其中哪一个,或任何一个,或两者最终都会起作用.我在解决方案级别尝试了两种方法.nuget.config文件可以放在TFS项目根级别上,还是必须放在解决方案目录中?似乎NuGet以某种顺序从这些文件中读取和应用设置,为什么将它们添加到多个级别是有意义的,其中解决方案级别上的nuget.config文件将覆盖TFS项目根级别上的一个.这可以澄清吗?
在这些引用工作之前,是否需要删除所有已安装的软件包?我很乐意,如果有人可以提供逐步说明,从特定于解决方案的nuget使用转移到一个公共包文件夹,其中属于多个解决方案的项目可以找到他们所需的nuget包.
我为此感到茫然:
我已经为实体框架(4.1.3)代码第一种方法定义了我的类.一切都很好(我正在制作桌子等),直到我开始播种.
现在当我这样做的时候
Add-Migration "remigrate" ; Update-Database;
Run Code Online (Sandbox Code Playgroud)
我在程序包控制台上收到错误"一个或多个实体的验证失败.有关详细信息,请参阅'EntityValidationErrors'属性."
我的Seed()方法中有一个断点但是因为我在项目没有运行时在控制台上运行它,我对如何获取细节毫无头绪(PS - 我看过线程验证失败对于一个或多个实体,同时使用Entity Framework保存对SQL Server数据库的更改,该实体框架显示了我如何查看属性.)
我知道我的Seed()方法有问题,因为如果我在方法调用之后立即返回,则错误消失.那么如何设置断点以便我可以看到验证错误是什么?有点失落.或者是否有其他方法可以在nuget控制台中跟踪它?
刚升级ASP.NET MVC4项目以使用Unity.WebApi版本5.0.0.0,它需要System.Web.Http v 5.0.0.0,因为以下错误:
Assembly 'Unity.WebApi, Version=5.1.0.0, Culture=neutral, PublicKeyToken=43da31bc42a85347' uses 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Run Code Online (Sandbox Code Playgroud)
我目前正在引用System.Web.Http v4.0但是将以下NuGet包升级到各自的最新版本:
WebGrease
通过NuGet.我没有列出相关的JavaScript库,如Micrososft.jQuery.Unobtrusive Validation等.
什么是升级System.Web.Http的NuGet包,还是我必须手动执行此操作?
如何在解决方案中找到未使用的NuGet包?
我有很多解决方案,其中有很多已安装的软件包,并且大量标记为有更新.
但是我担心可能会有变化,所以我首先要删除任何未使用的软件包.