2017-05-04 153 views
3

特别是在Ubuntu上,这似乎不起作用。如何在.NET核心应用程序中使用.NET核心类库?

例如,如果我这样做:

dotnet new sln -n HelloWorld 
dotnet new classlib -n HelloLib 
dotnet new console -n HelloApp 
dotnet sln add ./HelloApp/HelloApp.csproj 
dotnet sln add ./HelloLib/HelloLib.csproj 
dotnet restore 
dotnet build 

cd HelloApp/ 
dotnet add reference ../HelloLib/HelloLib.csproj 

并修改Program.cs的是:

using System; 
using HelloLib; 

namespace HelloApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var x = new Class1(); 
      Console.WriteLine("Hello World!"); 
     } 
    } 
} 

则应用程序将编译,产生这些文物:

HelloApp/bin$ du -a 
4 ./Debug/netcoreapp1.1/HelloApp.deps.json 
4 ./Debug/netcoreapp1.1/HelloApp.runtimeconfig.json 
4 ./Debug/netcoreapp1.1/HelloApp.pdb 
4 ./Debug/netcoreapp1.1/HelloLib.pdb 
8 ./Debug/netcoreapp1.1/HelloApp.dll 
4 ./Debug/netcoreapp1.1/HelloApp.runtimeconfig.dev.json 
4 ./Debug/netcoreapp1.1/HelloLib.dll 
36 ./Debug/netcoreapp1.1 
40 ./Debug 
44 . 

...但执行应用程序失败:

$ dotnet HelloApp.dll 

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'HelloLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified. 

Aborted (core dumped) 

如果我删除using HelloLib线,它的工作原理:

$ dotnet HelloApp.dll 
Hello World! 

是什么回事?

我相信它得到的东西做在项目文件中的混乱不兼容:

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <TargetFramework>netstandard1.4</TargetFramework> <-- **THIS** 
    </PropertyGroup> 

</Project> 

VS:

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <OutputType>Exe</OutputType> 
    <TargetFramework>netcoreapp1.1</TargetFramework> <-- **And THIS** 
    </PropertyGroup> 
    <ItemGroup> 
    <ProjectReference Include="..\HelloLib\HelloLib.csproj"> 
     <Project>{1607a379-5bae-423b-8efc-796a06556be0}</Project> 
     <Name>HelloLib</Name> 
    </ProjectReference> 
    </ItemGroup> 
</Project> 

我以为这只是一个错误。

...但其他人似乎使用.NET核心没有太多的麻烦。

那么,我做错了什么?

还是人们使用.NET核心只是不使用类库,因为他们不工作?

(编辑:版本:

Microsoft .NET Core Shared Framework Host 

    Version : 1.1.0 
    Build : 928f77c4bc3f49d892459992fb6e1d5542cb5e86 

$ dpkg -l |grep dotnet 
ii dotnet-dev-1.0.3             1.0.3-1          amd64  .NET Core SDK 1.0.3 

$ cat /etc/issue 
Ubuntu 16.10 \n \l 
+0

您的dll是否存在于您的工作项目目录中? –

回答

5

后你做

dotnet add reference ../HelloLib/HelloLib.csproj 

你必须做一个额外的

dotnet restore 

所以引用将由项目进行适当跟踪如果。你遵循相同的步骤,但在dotnet add reference步骤工作后添加dotnet restore步骤精细。

无论何时更改或更新您的refrences必须调用后或dotnet restore改变你dotnet build声明是dotnet build /t:restore所以它会做的建立您之前恢复。

+0

oo ...'dotnet build/t:restore'似乎是我失踪的魔法酱。谢谢〜 – Doug

相关问题