2016-06-02 12 views
2

Ich möchte Daten kleine Datenzugriffsbibliothek für Sql Server erstellen, die Standard-Sql-Client-Klassen umhüllt und es in NuGet veröffentlichen. Ich möchte dieses NuGet-Paket sowohl in Standard- als auch in .Net-Kern-Apps verwenden.Wie nuget package (dll) für Standard-Framework und .Net Core erstellen?

Ich erstellte Klassenbibliotheksprojekt mit Datenzugriffscode (es verwendet System, System.Core und System.Data) und veröffentlichte es auf Nugget. Ich habe System, System.Core und System.Data als NuGet-Framework-Abhängigkeiten hinzugefügt.

UPDATE - described problems both in RC1 and RC2 

In RC1-Version funktioniert es mit 4.6 Framework, aber ich musste DNX 5 aus package.json entfernen.

In RC2-Version mit ASPNET Core (.Net Framework) Projekten funktioniert, aber wenn ich ASPNET Core (Net Core) erstellen, Kompilierung fehlschlägt:

Fehler NU1002 Die Abhängigkeit nicht Rahmen .NETCoreApp, Version unterstützen = v1.0.

Gibt es eine Möglichkeit, ein Nugget-Paket zu erstellen, das in beiden Versionen funktioniert?

+0

dnx ist kein Ding mehr. Sie sollten zu RC2 und netstandard gehen ... – Pawel

+0

Sie haben Recht, aber das löst das Problem immer noch nicht. Wenn ich RC2-Anwendung erstelle, erhalte ich den Fehler bei der Paketwiederherstellung: Fehler \t NU1002 \t Die Abhängigkeit unterstützt Framework .NETCoreApp, Version = v1.0 nicht. \t Ich kann das beheben, wenn ich Nugget-Paket in einem neuen Projekt mit .NET Core-Klassenbibliothek erstellen, aber wiederum hätte ich zwei Projekte zu verwalten, eines für RC2 und das andere für Nicht-Kern-Anwendungen. –

Antwort

1

Da .NET Core 1.0 gerade diese Woche veröffentlicht wurde, werde ich die Frage im Zusammenhang mit der neuesten Version des Frameworks beantworten.

Wenn Sie versuchen, sowohl ASP.NET Core 1.0 als auch .NET 4.5 zu targetieren, müssen Sie beide Frameworks separat definieren, einschließlich aller Abhängigkeiten, die jeder Frameworkbuild erfordern würde.

Hier ist eine Beispieldatei project.json für ein Klassenbibliotheksprojekt, das auf .NET Core Standard 1.5, ASP.NET Core 1.0, .NET 4.5 und .NET 4.0 abzielt und von System.Linq.Expressions abhängig ist Namespace:

{ 
    "version": "1.0.0-*", 

    "frameworks": { 
     "netstandard1.5": { 
      "imports": "dnxcore50", 
      "dependencies": { 
       "NETStandard.Library": "1.6.0", 
       "System.Linq.Expressions": "4.1.0" 
      } 
     }, 
     "netcoreapp1.0": { 
      "imports": "dnxcore50", 
      "dependencies": { 
       "Microsoft.NETCore.App": { 
        "type": "platform", 
        "version": "1.0.0" 
       }, 
       "System.Linq.Expressions": "4.1.0" 
      } 
     }, 
     "net45": { 
      "frameworkAssemblies": { 
       "System.Linq.Expressions": "" 
      } 
     }, 
     "net40": {} 
    } 
} 
+1

Danke, dies löste meinen ersten Teil des Problems (Erstellen separater DLLs für separate Frameworks). Aber ich verstehe immer noch nicht, wie man diese DLLs in ein einziges Nugget-Paket packt. Bis jetzt habe ich keine DLL auf Nugget installiert und nicht vier Versionen in vier Unterordnern. Wenn ich sie alle zum selben Nugget hinzufüge, könnte es dann aufgelöst werden, wenn jemand es installiert? –

0

Mit Visual Studio 2017 können Sie eine .NET Standard-Projektbibliothek erstellen. Sie können die Version in den Eigenschaften des Projekts auswählen.

Ein solches Projekt sieht wie folgt aus:

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <TargetFramework>netstandard1.4</TargetFramework> 
    <AssemblyName>MyAssembly</AssemblyName> 
    <PackageId>MyPackage</PackageId> 
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> 
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> 
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> 
    <Copyright>Copyright</Copyright> 
    <Description>Simple Library</Description> 
    <Authors>Me</Authors> 
    <AssemblyVersion>1.1.0</AssemblyVersion> 
    <FileVersion>1.1.0</FileVersion> 
    <Version>1.1.0</Version> 
    <Company>MyCompany</Company> 
    </PropertyGroup> 
    <ItemGroup> 
    <Folder Include="Properties\" /> 
    </ItemGroup> 
</Project> 

In IDE, Sie haben das Paket Befehl auf dem Rechtsklick-Menü oder Sie können diese Art:

msbuild /t:pack myproject.csproj 

nur ein Paket .... um sie alle zu beherrschen und ... :)