gpt4 book ai didi

ASP.NET 5 (vNext) 构建发布和调试的不同依赖项

转载 作者:行者123 更新时间:2023-12-04 02:27:21 27 4
gpt4 key购买 nike

我们正在开发一个 ASP.NET MVC 5 项目,该项目依赖于来自不同解决方案的项目。另一个解决方案是常见的类库,我们发布为 NuGet 包。当我们发布时,我们编译项目并从 NuGet 存储库中获取它,但在开发过程中,我们从该项目的 bin 文件夹中获取引用。

为了使其正常工作,我们对 ASP.NET 项目的 csproj 文件执行了以下“hack”操作(我们手动编辑了 csproj xml 文件并更改了引用):

<Reference Include="Common.Utilities, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath Condition=" '$(Configuration)' == 'Debug' ">..\..\..\Common\Common.Utilities\bin\$(Configuration)\Common.Utilities.dll</HintPath>
<HintPath Condition=" '$(Configuration)' != 'Debug' ">..\..\..\..\ExtrnBin\NuGetPackages\Common.Utilities.1.0.0.8\lib\net451\Common.Utilities.dll</HintPath>
</Reference>

因此,当我们编译调试时,它会从类库项目文件夹中获取,而当我们编译发布时,它会从下载的 NuGet 中获取。这对于快速开发非常有用,因为我们不必为每次更改都重新发布新的 NuGet。

我们现在正在测试 ASP.NET 5,并且在 csproj 中不再定义依赖项。文件,但在 project.json文件。因此,如果我们添加一个引用,我们会在 project.json 中得到类似的信息。 :
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"Microsoft.ApplicationInsights.AspNet": "1.0.0-rc1",
"Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
"Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
"Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
"Common.Utilities": "1.0.0.8-*"
}

它还会创建一个包装文件夹并将 DLL 复制到 lib\dnx\451文件夹。

我们如何设置类似于我们之前所拥有的东西来支持 2 个构建配置?

最佳答案

简答

您无法避免重新发布;但是,您可以避免远程重新发布。

在每次构建类库解决方案时,将 NuGet 包发布到本地目录,例如 C:\LocalPackages .在您的 MVC 项目中,使用两个不同的 NuGet 包源:一个用于发布,另一个用于调试。制作调试源C:\LocalPackages .

调试将从本地 NuGet 源中获取,发布将从下载的 NuGet 中获取。

来自 ASP.NET Core 存储库的示例

ASP.NET MVC repository用途不同 packageSources对于不同的构建。您的问题的一个答案是使用相同的方法,但使用本地 packageSources用于开发构建。

aspnet release分支 > nuget.config

<packageSources>
<clear />
<add key="AspNetVNext" value="https://www.myget.org/f/aspnetmaster/api/v3/index.json" />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
</packageSources>

aspnet dev分支 > nuget.config
<packageSources>
<add key="AspNetVNext" value="https://www.myget.org/F/aspnetcidev/api/v3/index.json" />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
</packageSources>

本地快速开发的工作流程

这是我们使用的工作流程的近似值。这足以让你开始。

在构建时生成 NuGet 包

在 Visual Studio 2015 中,新建一个 Class Library (Package) .将其配置为在构建时将包发布到本地目录。换句话说...
  • 右键单击项目。
  • 选择属性。
  • 在“构建”选项卡中,选择“在构建时生成输出”。

  • 现在,每个构建都会将类库作为 NuGet 包输出到解决方案的 artifacts目录。

    在构建时自动将 NuGet 包发布到本地目录

    要在单个本地 NuGet 源中访问我们的所有包,请添加以下 postpack 脚本到类库的 project.json .该脚本将包复制到我们本地的 NuGet 源目录。 /y选项覆盖现有文件。

    项目.json
    "scripts": {
    "postpack":
    "xcopy /y ..\\..\\artifacts\\bin\\%project:Name%\\Debug\\*.nupkg C:\\LocalPackages\\"
    }

    请参阅复制调试和/或发布包的备用脚本的备注。

    配置MVC项目使用本地NuGet目录

    打开位于单独解决方案中的 MVC 项目。有关在不修改全局 NuGet 设置的情况下指定解决方案包的方法,请参阅备注。
  • 选择“工具”>“NuGet 包管理器”>“包管理器设置”
  • 单击包源。
  • 添加一个名为 LocalPackages 的新包源.
  • 将其来源设置为 C:\LocalPackages .
  • 单击更新。

  • 准备好发布时,替换 LocalPackages带有用于生产的适当 NuGet 源的条目。

    Pointing at the local packages

    将本地 NuGet 包添加到您的项目

    从 MVC 项目中,访问本地 NuGet 包。
  • 选择“工具”>“NuGet 包管理器”>“管理解决方案的 NuGet 包”
  • 将包源设置为 LocalPackages .
  • 选择浏览选项卡。
  • 安装本地包。

  • Using the local packages

    评论

    (1) 要在我们的项目中同时使用 Debug 和 Release 包,请使用以下 postpack脚本。
    for /r "..\\" %i in (*.nupkg) do xcopy /y %i C:\LocalPackages`

    (2) Visual Studio 将 NuGet 包源添加到 ~\AppData\Roaming\NuGet\nuget.config文件。或者,创建一个 nuget.config在我们的解决方案的根源。
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <packageSources>
    <add key="LocalPackages" value="C:\LocalPackages" />
    </packageSources>
    </configuration>

    关于ASP.NET 5 (vNext) 构建发布和调试的不同依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285589/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com