Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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
C# 如何在本地编译时在.NuGet文件夹中安装NuGet_C#_Visual Studio_Nuget_Nuget Package Restore - Fatal编程技术网

C# 如何在本地编译时在.NuGet文件夹中安装NuGet

C# 如何在本地编译时在.NuGet文件夹中安装NuGet,c#,visual-studio,nuget,nuget-package-restore,C#,Visual Studio,Nuget,Nuget Package Restore,我有两个.Net项目: 一个项目是包含一些DTO的.Net标准项目;称之为核心库。这将作为NuGet包发布 另一个是一个.NETFramework项目,其中包括核心库的NuGet包。称之为应用程序 使用TFS,我们能够编译核心库,发布生成的NuGet库,然后启动应用程序的构建,从而将NuGet引用恢复到核心库。一切正常 问题是,在开发core library+应用程序时,我们经常编译core,不能等待整个core library构建完成,以更新应用程序的本地引用。此外,我们必须推送核心库的完整提

我有两个.Net项目:

一个项目是包含一些DTO的.Net标准项目;称之为核心库。这将作为NuGet包发布 另一个是一个.NETFramework项目,其中包括核心库的NuGet包。称之为应用程序 使用TFS,我们能够编译核心库,发布生成的NuGet库,然后启动应用程序的构建,从而将NuGet引用恢复到核心库。一切正常

问题是,在开发core library+应用程序时,我们经常编译core,不能等待整个core library构建完成,以更新应用程序的本地引用。此外,我们必须推送核心库的完整提交,因此在应用程序中测试之前,我们不能一次推送一个DTO

因此,我想知道Visual Studio和Nuget中是否存在一种在本地用户的.Nuget文件夹中发布/安装core的Nuget库的方法,以便在下一次构建时让应用程序的项目自动看到它

你能帮我吗

所以我想知道在VisualStudio和Nuget中是否存在一种方法 在本地用户的.Nuget中发布/安装core的Nuget库 文件夹以使其可见

在本地发布nuget PackageGet push到一个位置之前,我们应该将路径添加为包源。因此,首先需要将本地包的路径设置为包源。nuget.config文件中的内容与VS中的包源UI相对应,因此有两种方法

1.在VS中,go Tools=>nuget package manager=>package manager设置=>package source,单击绿色按钮定义新的包源

2.或者我们可以找到当前用户的nuget.config文件,请参阅。1中的UI操作实际上有助于在C:\Users\xxx\AppData\Roaming\nuget中的nuget.config文件中定义源,请参阅:

所以我们可以直接编辑这个文件来设置新的包源代码,然后保存文件并重新启动VS,我们可以在UI中看到新定义的源代码


我的问题是将nuget push命令自动化到本地提要, 在我的例子中应该是%userprofile%.nuget\packages。我不能问 公司内的任何人员手动将核心包复制到 本地订阅源以查看链接应用程序中的更改

将本地源添加到包源之后,可以使用nuget push命令将包发布到源

您可以在核心库项目filexx.csproj中定义与此类似的自定义目标,以自动打包和推送包:

  <Target Name="CustomTarget" AfterTargets="build">
    <Exec Command="nuget.exe pack xx.csproj"/>
    <Exec Command="nuget.exe push -source xxx path\xxx.nupkg"/>
  </Target>
您还可以将添加到该目标,。您可以控制VS应该在哪个配置中运行此目标,以便为您打包和推送

此外:

对于.net核心库项目,VS可以选择创建。nuget软件包。您可以右键单击VS中的项目并选择“打包”按钮。因此,您还可以为此项目定义一个.bat文件来执行nuget推送。这个过程是构建project=>usepack选项以轻松获取nuget-package=>运行.bat自动推送


希望能有所帮助。

从答案开始,我根据自己的需要做了一些改变。事实上,在本地我没有安装nuget.exe,只有.Net核心运行时,所以我使用dotnet pack命令代替nuget.exe pack,使用dotnet nuget push代替nuget.exe push。此外,在本地推送更新的NuGet包之前,我删除了具有相同版本的旧包,否则dotnet NuGet推送包

我接受Lance Li MSFT的回答,因为这是我解决方案的起点,适用于在本地拥有nuget.exe的用户

我的解决方案如下

corelib.csproj


作为补充说明,我不必在Visual Studio中配置包源,因为路径%UserProfile%\.Nuget\packages处的全局Nuget缓存是搜索Nuget包的第一个位置。

如果两个项目都是本地生成的,为什么不使用方便的项目引用?如果您想让应用程序的项目自动看到nuget包,可以按照mm8的建议将nuget包放在nuget.config中定义的任何包源路径中。您还可以通过UI在VS IDE中执行此操作,go Tools=>nuget package manager=>package manager设置要添加新的包源,它可以是一个本地文件夹,如C:\CustomPackages,然后此文件夹中的任何nuget包都可以在应用程序的nuget package manager UI中可见。您还可以将路径设置为本地缓存C:\xxx\.nuget\packages。我的问题是将nuget push命令自动发送到本地提要,在我的情况下,该提要应该是%userprofile%\.nuget\packages。我不能要求公司中的任何人手动将核心包复制到本地提要,以便查看链接应用程序中的更改。您想做的与?运行生成后事件或目标,以在每次生成后自动执行nuget push命令
核心库项目的成功构建。您好,此问题有任何更新吗?或者我误解了你最后的评论:对不起,我以为我回答了你的答案!从这个答案开始,我添加了一些我需要的细节。看见
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

  <Target Name="PublishNuGetLocally" AfterTargets="Build">
    <Exec Command="dotnet pack $(ProjectPath)"/>
    <Exec Command="dotnet nuget delete --source $(UserProfile)\.nuget\packages $(PackageId) $(PackageVersion) --non-interactive" ContinueOnError="WarnAndContinue"/>
    <Exec Command="dotnet nuget push --source $(UserProfile)\.nuget\packages $(ProjectDir)bin\$(ConfigurationName)\$(PackageId).$(PackageVersion).nupkg" />
  </Target>
  [...]

</Project>