2016-06-02 2 views
2

Я хочу создать небольшую библиотеку доступа к данным для Sql Server, которая обертывает стандартные классы клиента Sql и публикует ее в NuGet. Я хочу использовать этот пакет NuGet как в стандартных, так и в сетевых приложениях .Net.Как создать пакет nuget (dll) для стандартной структуры и .Net Core?

Я создал проект библиотеки классов с некоторым кодом доступа к данным (он использует System, System.Core и System.Data) и опубликовал его для саморождения. Я добавил System, System.Core и System.Data в качестве зависимостей структуры NuGet.

UPDATE - described problems both in RC1 and RC2 

В версии RC1 он работает с каркасом 4.6, но мне пришлось удалить DNX 5 из package.json.

В RC2 версии она работает с проектами ASPNET Ядра (.Net Framework), но когда я создаю ASPNET Ядро (.Net ядро), компиляция терпит неудачу:

Ошибка NU1002 Зависимость не поддерживает рамку .NETCoreApp, версию = 1.0.

Есть ли способ создать пакет самородок, который работает в обеих версиях?

+0

dnx больше ничего не значит. Вы должны перейти к RC2 и netstandard ... – Pawel

+0

Вы правы, но это все еще не решает проблему. Когда я создаю приложение RC2, я получаю ошибку в восстановлении пакета: Ошибка \t NU1002 \t Зависимость <имя пакета> не поддерживает структуру .NETCoreApp, Version = v1.0. \t Я могу исправить это, если я создам пакет самородок в новом проекте с помощью библиотеки основных классов .NET, но снова у меня будет два проекта для поддержки, один для RC2 и другой для неосновных приложений. –

ответ

1

Поскольку .NET Core 1.0 был выпущен на этой неделе, я отвечу на вопрос в контексте последней версии фреймворка.

Если вы пытаетесь настроить таргетинг как на ASP.NET Core 1.0, так и на .NET 4.5, вам необходимо определить обе структуры отдельно, включая все зависимости, необходимые для каждой сборки фреймворка.

Ниже приведен пример файла project.json для проекта библиотеки классов, который предназначен для .NET Core Standard 1.5, ASP.NET Core 1.0, .NET 4.5 и .NET 4.0 и имеет зависимость от System.Linq.Expressions пространство имен:

{ 
    "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

Спасибо, это решило мою первую часть проблемы (создание отдельных dll для отдельных фреймворков). Но все же я не понимаю, как упаковать эти DLL в единый пакет самородок. До тех пор, пока я не развернул одну dll для самородок, а у меня нет четырех версий в четырех подпапках. Если я просто добавлю их все к одному и тому же самороду, можно ли его решить, когда кто-нибудь его установит? –

0

С Visual Studio 2017 вы можете создать библиотеку проектов .NET Standard. Вы можете выбрать версию в свойствах проекта.

Такого проект выглядит следующим образом:

<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> 

В IDE, у вас есть команда пакета в меню правой кнопки мыши или вы можете ввести следующее:

msbuild /t:pack myproject.csproj 

только один пакет .... управлять ими все и ... :)

Смежные вопросы