如何在dotnet核心中创建一个简单的可重用库?

时间:2016-09-03 18:35:38

标签: .net ubuntu .net-core

我正在尝试使用Ubuntu上的VS Code在dotnet核心中创建一个可重用的库。 我可以创建库和一组成功运行它的xUnit测试。 所以,我从包含project.json文件的文件夹中做了一个dotnet包,如下所示:

dotnet pack -o / home / me / projects / local-nuget

运行正常并按预期创建了我的foundation.1.0.0.nupkg文件。 (基础是我的图书馆的名称)。 我的“基础”库的project.json文件是:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  // This is the references section for this assembly
  "dependencies": {
    "Newtonsoft.Json": "9.0.1"
  },
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  }  
}

然后我创建了一个新项目来使用这个名为app的库。 它有一个global.json文件,如下所示:(我相信这就是找到nuget包的方式....)

{
    "sources" : [
        "/home/me/projects/local-nuget"
    ]
}

它有一个project.json文件,如下所示:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {
    "foundation":"1.0.0"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": ["dnxcore50"]
    }    
  }
}

当我执行dotnet还原时,收到以下错误消息:

/home/me/projects/app/project.json中的错误     包基础1.0.0与netcoreapp1.0(.NETCoreApp,Version = v1.0)不兼容。包基础1.0.0支持:net(.NETFramework,Version = v0.0)     一个或多个程序包与.NETCoreApp,Version = v1.0不兼容。 错误:错误:命令失败:dotnet restore“/home/me/projects/app/project.json”

新的“app”是使用“dotnet new”创建的,我所做的唯一更改是在project.json文件中添加依赖项,如上所示。

当我查看我的local-nuget文件夹时,我看到以下内容:

me @ me-desktop:〜/ projects / local-nuget $ ls

foundation.1.0.0.nupkg foundation.1.0.0.symbols.nupkg

所以,我知道dotnet pack命令有效。

这应该不是那么难!创建一个可重用的库然后在新的应用程序中使用它需要什么魔力?我们有很多源代码要转移到dotnet核心,但我们的库结构依赖于重用。

感谢任何帮助。

编辑====================

好的,我也对global.json文件有点怀疑,所以我在项目的根目录添加了一个NuGet.config。 当我进行dotnet恢复时,我得到了同样的错误。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="LocalSource" value="/home/me/projects/local-nuget" />
  </packageSources>
  <disabledPackageSources />
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

编辑两个============================================= 我在nuget.config中添加了一行:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <config>
    <add key="globalPackagesFolder" value="/home/me/projects/packages" />
  </config>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="LocalSource" value="/home/me/projects/local-nuget" />
  </packageSources>
  <disabledPackageSources />
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

这会将所有包导入我的“packages”文件夹,包括我的“foundation”包。我觉得一切顺利,直到我做了 dotnet build。

现在我收到一个错误:

 Compiling app for .NETCoreApp,Version=v1.0                                                                                        
    /usr/share/dotnet/dotnet compile-csc @/home/me/projects/app/obj/Debug/netcoreapp1.0/dotnet-compile.rsp returned Exit Code 1      
    /home/me/projects/app/error CS0006: Metadata file '/home/me/.nuget/packages/foundation/1.0.0/lib/netstandard1.6/foundation.dll' could not be found. Compilation failed.

当我查看'/home/me/packages/foundation/1.0.0/lib/netstandard1.6'时,我确实找到了文件foundation.dll

然而,该错误表明它正在寻找'/home/me/.nuget/packages/foundation/1.0.0/lib/netstandard1.6'

为什么目录中有额外的'/.nuget'节点?我在哪里指定?

再次提前感谢....

编辑三个============================================ / p>

好的,这很奇怪。我是nix的新手,但记得隐藏的文件以'。'开头。所以我在我的主文件夹和中提琴中查找了隐藏文件,我找到了'.nuget'文件夹。追逐这条路,我确实最终找到了我宝贵的foundation.dll,但它拼写了一个CAPITAL F - Foundation.dll。我认为这很奇怪,因为我使用小写'f'构建它但是知道nix对于case很挑剔,我将我的project.json文件更改为大写'F' - 我的依赖项中的'Foundation'。

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {
    "Foundation":"1.0.0-*"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": ["dnxcore50"]
    }    
  }
}

在进行了dotnet恢复后,我冒险进入了dotnet版本,并遇到了以下错误。

/home/me/projects/app/project.json(8,26):错误NU1001:无法解析依赖性基础&gt; = 1.0.0- *。

所以现在,我更接近,但似乎仍然无法像在VS 2015中那样只添加一个引用。

请帮忙!

0 个答案:

没有答案