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

时间:2016-03-29 13:22:19

标签: asp.net .net asp.net5

我们正在开发一个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种构建配置的东西?

1 个答案:

答案 0 :(得分:1)

简短回答

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

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

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

ASP.NET核心存储库中的示例

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

aspnet release分支&gt; 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分支&gt; 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)。将其配置为在构建时将包发布到本地目录。换句话说......

  1. 右键单击该项目。
  2. 选择属性。
  3. 在构建选项卡中,选择&#34;在构建时生成输出。&#34;
  4. 每个构建现在将类库作为NuGet包输出到解决方案的artifacts目录。

    自动将NuGet包发布到构建

    上的本地目录

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

    project.json

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

    请参阅备注脚本的备注,该备份脚本同时复制调试和/或发行包。

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

    打开位于单独解决方案中的MVC项目。请参阅备注,了解在不修改全局NuGet设置的情况下指定解决方案包的方法。

    1. 选择工具&gt; NuGet包管理器&gt;包管理器设置
    2. 单击“包源”。
    3. 添加名为LocalPackages的新包源。
    4. 将其来源设为C:\LocalPackages
    5. 点击更新。
    6. 准备发布时,将LocalPackages条目替换为适当的NuGet源以进行生产。

      Pointing at the local packages

      将本地NuGet包添加到项目

      从MVC项目中,访问本地NuGet包。

      1. 选择工具&gt; NuGet包管理器&gt;管理解决方案的NuGet包
      2. 将包源设置为LocalPackages
      3. 选择浏览标签。
      4. 安装本地软件包。
      5. 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>
        
相关问题