zoukankan      html  css  js  c++  java
  • .net core 一次坑爹的类库打包过程

    众所周知,.net core 跨平台类库引用一定要通过nuget获得。(如有问题,欢迎指出)

    打包

    将普通.net project转换成.net core 的类库有两种方式:

    1.新建.net core 的类库 -》 把原所有文件拷贝过来 -》 在project.json中解决依赖包问题 -》编译打包

    2.新建.net core 的类库 -》 在project.json中配置源文件include complie, 如下:

     1  "frameworks": {
     2     "netstandard1.6": {
     3       "imports": "dnxcore50",
     4       "buildOptions": {
     5         "compile": {
     6           "include": [ "../MongoDB.Driver/**/*.cs", "../MongoDB.Shared/Hasher.cs" ]
     7         },
     8         "define": [ "DEBUG", "TRACE" ],
     9         "warningsAsErrors": true,
    10         "outputName" : "MongoDB.Driver",
    11         "xmlDoc": true
    12       }
    13     }
    14   }

    通过buildOptions的comple的include,把原来文件路径引用过来

    -》 编译project, 通过cmd命令切换到project目录

    -> dotnet build

    -》 打成nuget包

    -> dotnet pack

    这样,在原bin/debug目录下面会多出nuget包文件。

    引用

    坑爹就坑在引用上。

    通过反复验证,一个package包无论引用了多少其他程序集(包括自定义的),只需发布最终需要的package就可以了,因为依赖关系都已经在里面了。如下图:

    我的MongoDB.Driver.Dotnet引用了MongoDB.Bson.Dotnet和MongoDB.Driver.Core.Dotnet,打包的时间只需MongoDB.Driver.Dotnet就可以了。

    依赖关系都在打包的MongoDB.Driver.Dotnet.nuspec文件里

    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
      <metadata>
        <id>MongoDB.Driver.Dotnet</id>
        <version>1.0.0</version>
        <authors>MongoDB.Driver.Dotnet</authors>
        <owners>MongoDB.Driver.Dotnet</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>MongoDB.Driver.Dotnet</description>
        <tags></tags>
        <dependencies>
          <group targetFramework=".NETStandard1.6">
            <dependency id="MongoDB.Bson.Dotnet" version="[1.0.0, )" />
            <dependency id="MongoDB.Driver.Core.Dotnet" version="[1.0.0, )" />
            <dependency id="NETStandard.Library" version="[1.6.0, )" />
            <dependency id="System.Linq.Expressions" version="[4.1.0, )" />
            <dependency id="System.Linq.Queryable" version="[4.0.1, )" />
          </group>
        </dependencies>
      </metadata>
    </package>

    但这不是坑爹的地方,坑就坑在nuget在本地会有缓存在以下目录中

    C:Users\%Local User%.nugetpackages

    如果重新打包没有升级版本号,单纯在服务器端切换nuget包是没有的,一定要把本地也清空了。。

    目测是2015升级到最新版本才有的问题,因为我之前服务器直接替换没遇到过这样类似的问题,stackoverflow的这位仁兄也是

    http://stackoverflow.com/a/33214933

  • 相关阅读:
    Oracle 备份与恢复 15 个典型问题
    Oracle Rman 增量备份与差异备份
    Oracle top 查询TOP SQL
    Oracle 将另外一张表的列更新到本表的列
    Mysql Innodb 表碎片整理
    python Django 之 Model ORM inspectdb(数据库表反向生成)
    MySQL 5.6比较重要的参数,以及5.5到5.6默认值有过变化的参数
    Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirect
    HTML(一)基础
    Python Django 前后端数据交互 之 HTTP协议下GET与POST的区别
  • 原文地址:https://www.cnblogs.com/Hai--D/p/5776463.html
Copyright © 2011-2022 走看看