【问题标题】:Shared Class Library References for ASP.NET 5 beta 7ASP.NET 5 beta 7 的共享类库参考
【发布时间】:2015-09-30 14:31:03
【问题描述】:

在我们当前的环境中,我们有一些被 asp.net 和控制台应用程序引用的共享公共库(C# 类库 .NET 4.5.1 csproj)项目。我们正在考虑将我们的 1 个 Web 项目升级到 ASP.NET 5,以开始测试即将到来的一些新变化。

由于我无法在 ASP.NET 5 中对旧的 csproj 库类型进行项目引用,因此我必须通过它编译的 DLL 来引用该库并从 project.json 中删除 dnxcore50(这对我们来说很好)。但是,我们拥有共享库源并不断在我们的 DEV 环境中进行更新,以便经常需要对 DLL 进行修改和更改。 ASP.NET 5 将 DLL 放在 lib 目录中,并且不使用 csproj 目录的路径。

如果您有 asp.net 和控制台 csproj 应用程序以及 asp.net 5 应用程序需要共享一个通用代码库而无需维护 2 个代码库,您会怎么做?你会推荐一个构建任务来编译公共库项目并在编译 asp.net 5 项目之前替换 lib 中的引用 DLL,还是为我们的共享库设置一个本地 nuget 存储库,因为项目引用现在对于 csproj 来说是不可能的?我们是一个共享团队,所有这些代码都在 TFS 中,所以我所做的任何事情都需要很容易地复制给其他人。

【问题讨论】:

    标签: visual-studio-2015 asp.net-core


    【解决方案1】:

    如果共享代码不经常更改,我会使用共享的 nuget 存储库。通过这种方式,您可以获得使用 nuget 包的所有好处:版本控制、轻松恢复等。您的解决方案可以拥有更少的项目并更快地编译。 但是如果共享代码不断变化,那么打包-推送-恢复过程可能会很痛苦。

    还有另一种方法 - dnu 有一个方便的命令,名为 wrap。它将您现有的 .csproj 文件包装到 project.json 文件中,然后可由 aspnet5 项目引用。

    你可以这样做:

    1. 在包含您的项目的某个顶级目录中添加一个global.json 文件。在projects 部分,列出包含您的源代码的目录,例如:

      {
          "projects": [ "src", "test" ],
          "sdk": {
              "version": "1.0.0-rc1-final"
          }
      }
      
    2. 在包含global.json 的同一目录中,为每个现有的.csproj 项目执行dnu wrap

      dnu wrap src/my.project/my.project.csproj  
      

      这应该创建一个目录wrap,其中包含包装.csprojsproject.json 文件。示例文件如下所示:

      {
          "version": "1.0.0-*",
          "frameworks": {
              "net45": {
                  "wrappedProject": "../../src/my.project/my.project.csproj",
                  "bin": {
                      "assembly": "../../src/my.project/obj/{configuration}/my.project.dll",
                      "pdb": "../../src/my.project/obj/{configuration}/my.project.pdb"
                  }
              }
          }
      }
      

      注意wrap 目录也被添加到global.json 中的projects 部分。

    3. 在您的解决方案中,添加一个新的 aspnet 项目并添加对包装项目的引用。只需添加:

      "my.project": ""
      

      dependencies 部分。 Aspnet 应该会自动获取根目录中的global.json 文件,并会在那里列出的所有目录中查找项目,包括wrap 目录。

    4. 现在您可以开始了 - 您可以使用来自 my.project 的所有类,在调试时进入它们,转到定义等。请注意,在您的解决方案中,您仍然拥有旧的 csproj .

    您可以在此处找到示例代码:https://github.com/heavymetaldev/aspnet5-wrap

    我想如果你的项目中有一些自定义的东西,比如条件编译、自定义包含等,这可能会有点复杂。

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多