标签: nuget-package

NuGet包还原不适用于构建服务器

我已经在我的解决方案上设置了NuGet Package Restore,它在我的本地机器上运行良好.我按照这里提供的说明操作:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

我遇到的问题是在我的构建服务器上发生以下错误:

默认情况下禁用包还原.要同意,请打开Visual Studio选项对话框,单击程序包管理器节点,然后选中"允许NuGet在构建期间下载缺少的程序包".您还可以通过将环境变量"EnableNuGetPackageRestore"设置为"true"来表示同意.

不幸的是,我无法访问构建服务器,因为它是在站点外控制的,因此无法更新环境变量.还有其他方法吗?我可以添加到解决方案文件或类似的任何东西,以允许包恢复?

nuget nuget-package

21
推荐指数
4
解决办法
1万
查看次数

Git子模块与Nuget包

我们的团队已经尝试使用git子模块来实现我们大多数产品共享的一些核心CRUD功能.我们还成功地使用了Nuget软件包(现在自托管)用于一些常见的实用程序.

我们的核心功能经常发生变化,以确保子模块正确承诺,这更像是我们所期望的苦差事.我正在考虑将核心功能从子模块移动到Nuget包,但我想知道对包的频繁更新是否会让Nuget更加痛苦.

在对我们的架构和流程进行这种稍微干扰性的更改之前,是否有任何人对我可能遇到的其他挑战有任何经验和指导?

git git-submodules nuget nuget-package

20
推荐指数
2
解决办法
3897
查看次数

多框架NuGet构建带有内部依赖关系管理的符号

也许我在这里推动信封,但我迫切希望利用NuGet来缓解我发现自己的DLL地狱.

我们有4个主要产品都存在于相互关联的Mercurial存储库中.所有这些都"共享"了3个核心组件,然后其他一切都是针对特定产品的.现在管理变得非常困难,因为一个产品已升级到.NET 4.0并且正在使用需要.NET 4.0的外部依赖项,而另一个产品因为我甚至不想进入的原因而陷入.NET 3.5.

因此,我们失去了合并产品差异的能力.

要修复它,我想取出3个主要程序集,并将它们转换为自己的项目,并使用自己的发布周期,并注意确保它们可以针对.NET 3.5和4.0进行编译,然后将它们转换为NuGet包含多个框架版本.

但是,我也希望开发人员能够浏览这些项目的来源.

所以我设置了一个私有的NuGet服务器和一个私有的SymbolSource服务器.然后我仔细地将所有存储库中的所有更改合并在一起,并丢弃除核心程序集之外的所有内容.然后我精心手工编辑.csproj文件,以便代替AnyCPU平台,每个项目都有3.5和4.0的平台目标,它指定条件常量(控制System.Dynamic等特定于平台的功能)并设置框架版本.

然后我为"3.5 Debug","3.5 Release","4.0 Debug"和"4.0 Release"设置了解决方案配置.每个目标都适用于相应的配置(调试或发布)和平台(3.5或4.0).

我可以在Visual Studio中为任何平台构建一切.现在我遇到NuGet的问题,因为有两种方法可以创建一个包,两者都有一个弱点,除非我遗漏了一些东西:

按项目文件打包

nuget pack MyProject.csproj -Build -Symbols -Version <insert-from-build-server> -Properties "Configuration=Release;Platform=3.5;"
Run Code Online (Sandbox Code Playgroud)

这个问题是:

  • 在构建和打包3.5版本时,输出显示"构建目标框架的项目'.NETFramework,Version = v4.0'."
  • 如果我解压缩生成的包,则程序集lib\net40错误.
  • 我认为没有办法以这种方式打包2个框架目标,你必须用文件夹和约定的另一种方式来做.
  • 我愿意接受你不能将框架打包在一起并制作2个名为MyProject的软件包(我会做4.0)和MyProject.V35 ...但是我无法弄清楚如何拥有相同的项目和nuspec并结束使用不同ID的2个不同结果.

由Nuspec文件打包

使用这种方法,我必须自己完成所有msbuilding,然后进行一堆文件复制来设置文件夹结构

* MyProject.nuspec
* net40
    * MyProject.dll
    * MyProject.pdb
* net35
    * MyProject.dll
    * MyProject.pdb
Run Code Online (Sandbox Code Playgroud)

然后我可以运行nuget pack MyProject.nuspec但是没有源代码可以使用符号,因为没有.csproj文件,NuGet无法弄清楚从哪里获取所有源文件,而且我没有看到任何关于如何做的文档这使用目录约定.

所以我的问题是:

  1. 有没有办法将源文件添加到基于约定的包?
  2. 有没有办法用不同的ID打包基于项目的包两次?
  3. 还有其他途径,也许我没有考虑过吗?

任何想法将不胜感激.

multiplatform nuget nuget-package

20
推荐指数
2
解决办法
3963
查看次数

管理NuGet包将jquery还原为旧版本

我已经更新了jquery版本2.0,但我发现这与ie7和8不兼容,现在我想恢复到旧版本1.9.0.当我尝试使用Nuget控制台安装它时,它给出了我已安装新版本的错误.

install-package jquery -version 1.9.0
Successfully installed 'jQuery 1.9.0'.
Install failed. Rolling back...
Install-Package : Already referencing a newer version of 'jQuery'.
At line:1 char:16
+ install-package <<<<  jquery -version 1.9
+ CategoryInfo          : NotSpecified: (:) [Install-Package],     InvalidOperationException
 + FullyQualifiedErrorId :NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
Run Code Online (Sandbox Code Playgroud)

c# nuget-package asp.net-mvc-4

20
推荐指数
1
解决办法
1万
查看次数

NuGet的Restore Package坚持特定的软件包版本

我有一个包含以下packages.config的项目:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Framework.Infrastructure.Core" version="1.4.0.6" />
  <package id="Framework.Infrastructure.Extensions" version="1.4.0.6" />
</packages>
Run Code Online (Sandbox Code Playgroud)

Framework.*包位于我们的本地存储库中.

我启用了Package Restore并将内部repo添加到了源代码中.但是,当我尝试从packages.config(基本上nuget install packages.config -sources....)恢复包时,我收到以下错误:

error : Unable to find version '1.4.0.6' of package 'Framework.Infrastructure.Extensions'
error : Unable to find version '1.4.0.6' of package 'Framework.Infrastructure.Core'.
Run Code Online (Sandbox Code Playgroud)

存储库不再包含该软件包的1.4.0.6版本(几个月前相关),而是包含它的新版本(例如,1.5.1.6).

为什么NuGet没有找到新版本的软件包?我可以在packages.config中指定一些语法以确保下载最新版本吗?

简而言之,编写自定义脚本以更新我可以执行的包有什么用吗?

谢谢.

.net nuget nuget-package

19
推荐指数
2
解决办法
2万
查看次数

neget或神器与nuget?

我正在尝试向我的组织介绍体面的参考管理.之前使用过Nexus和Maven,我知道它远远优于在本地构建所有东西的方法.由于这是一个.Net商店,我想使用NuGet而不是Maven.我知道二进制存储库将是最重要的一点,但没有在二进制存储库中托管NuGet存储库的经验.

在这种情况下,有任何理由支持Nexus或Artifactory吗?我们使用Jenkins和svn作为我们的CI,如果这有任何区别的话.

nexus artifactory nuget nuget-package jenkins

19
推荐指数
2
解决办法
1万
查看次数

Nuget:更改包目录路径和名称

是否可以更改创建的nuget包目录的名称和路径?

我当前的文件夹结构是这样的:

+ SRC

++ PROJECT1

++ Project2的

++包

我想要一个像这样的文件夹结构:

+ Lib(包)

+ SRC

++ PROJECT1

++ Project2的

directory-structure nuget nuget-package

18
推荐指数
1
解决办法
2万
查看次数

保证相同版本的nuget包

我们有一个框架,在一个解决方案中分成许多单独的项目.我现在想为每个单独的项目创建NuGet包,保证只能在一个解决方案中使用一个版本的框架(可能跨多个项目).

例如,假设框架由两个项目组成:

Framework
   Framework_1
   Framework_2
Run Code Online (Sandbox Code Playgroud)

现在,当使用此框架时,一个项目可能会引用Framework_1,而另一个项目引用Framework_2.我想确保两个软件包具有相同的版本(如果有一个简单的单步过程升级到新版本,则可获得奖励积分)

我想我会定义一个解决方案级别的Framework包,所有其他包都严格依赖它.问题是NuGet只需安装多个版本的解决方案级别包就没有问题.

基本上我尝试了以下内容:

解决方案级别的nuspec文件:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>My.Framework</id>
    <version>1.0.0</version>
    <title>My.Framework</title>
    <authors>voo</authors>
    <owners>voo</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Some Framework Solution Package</description>
    <copyright>Copyright ©  2015</copyright>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

和一个nuspec包的一部分:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>My.Framework.BL</id>
    <version>1.0.0</version>
    <title>My.Framework.BL</title>
    <authors>voo</authors>
    <owners>voo</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Business Layer</description>
    <copyright>Copyright ©  2015</copyright>
    <dependencies> 
        <dependency id="My.Framework" version="[1.0.0]"/>
    </dependencies>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我尝试安装,说另一个My.Framework.EF带有版本的软件包,1.0.1并且对My.Framework1.0.1 的显式依赖Visual Studio只会安装My.Framework两次 …

c# nuget nuget-package visual-studio-2013 nuget-spec

18
推荐指数
2
解决办法
1281
查看次数

dotnet pack项目参考

我非常喜欢在几个程序集之间分离功能,例如,外观到数据提供程序,数据提供程序的合同以及数据提供程序实现本身......在我看来,它可以轻松地对单个组件进行单元测试功能和将来很容易换掉一件事(在我的例子中,它使数据提供者易于更换).

如果我创建一个包含3个项目并使用项目引用的解决方案,那么当我在入口程序集上构建dotnet时,所有引用都将复制到输出文件夹中.当我通过dotnet打包条目汇编项目来创建NuGET包时,NuGET包中只包含条目组件(而不是契约或数据提供者)

这似乎是设计上的; .NET Core dotnet-pack 的文档说明了这一点

项目到项目的引用不会打包在项目中.目前,如果您具有项目到项目的依赖关系,则每个项目必须有一个包.

我的问题是 - 为什么会这样?如果我想将我的代码分成逻辑程序集,我不得不创建单独的NuGET包并引用它们,或者只是将我的所有代码都集成到一个程序集中.有没有办法在NuGET包中包含项目引用?

我正在使用VS2017/.NET Core v1.1(csproj,而不是xproj)

c# project-reference nuget-package .net-core

18
推荐指数
1
解决办法
3381
查看次数

在Linux上构建面向.NET Framework的NuGet包

我想创建一个NuGet包,可以同时和明确的目标两者的.NET Framework 4.6.2和.Net标准1.5.这是VS 2017的缩写.csproj文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net462;netstandard1.5</TargetFrameworks>
    ...
  </PropertyGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

当我从本地Windows机器执行dotnet构建和打包命令时,NuGet包的创建完全符合预期.

但是,当我尝试在Linux上执行相同的dotnet命令时,我收到以下错误:

/opt/dotnet/sdk/1.0.4/Microsoft.Common.CurrentVersion.targets(1111,5):错误MSB3644:找不到框架".NETFramework,Version = v4.6.2"的引用程序集.要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本.请注意,程序集将从全局程序集缓存(GAC)中解析,并将用于代替引用程序集.因此,您的程序集可能无法正确定位到您想要的框架.

然后我突然意识到Linux盒子上没有任何常规的.NET Framework程序集(更不用说了.因此,似乎我将无法使用Linux来构建我的NuGet包.我搜索了一下" Targeting Pack",但它仅适用于Windows.

冒着听起来天真的风险,是否有人在Linux上成功构建可以针对.NET Framework的NuGet包?

.net linux nuget-package .net-core visual-studio-2017

18
推荐指数
2
解决办法
3134
查看次数