2

Я пытаюсь использовать новый проект Class Library (Package) в VS 2015.Целевые конкретные рамки в классе библиотеки (пакет)

Я хотел бы предназначаться dnx451, поэтому мой package.json выглядит следующим образом:

{ 
    "version": "1.0.0-beta-1", 
    "description": "Foo", 
    "authors": [ "Foo" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 

    "dependencies": { 
    "Newtonsoft.Json": "8.0.1", 
    "Microsoft.AspNet.Razor": "4.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final", 
    "System.Net.Http": "4.0.1-beta-23516" 
    }, 

    "frameworks": { 
    "dnx451": { } 
    } 
} 

Сложение прекрасно, и я получаю:

Recaptcha-dnxcore -> C:\Users\Epic\Documents\artifacts\bin\Foo\Release\Foo.1.0.0-beta-1.nupkg

Теперь я создаю веб-проект и редактировать свой файл project.json так, что цели только dnx451 рамки:

"frameworks": { 
    "dnx451": { } 
}, 

Когда я добавить ссылку на мой Foo пакет, я получаю сообщение об ошибке:

The dependency Foo 1.0.0-beta-1 in project WebApplication7 does not support framework DNX,Version=v4.5.1.

Как я могу создать пакет NuGet из Class Library (Package) проекта, который поддерживает dnx451?


За комментарием ниже, вот полный project.json веб-приложения:

{ 
    "userSecretsId": "aspnet5-WebApplication7-0b4c05f0-6435-486b-9738-1b6aa3daee2c", 
    "version": "1.0.0-*", 
    "compilationOptions": { 
    "emitEntryPoint": true 
    }, 

    "dependencies": { 
    "EntityFramework.Commands": "7.0.0-rc1-final", 
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", 
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final", 
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final", 
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", 
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", 
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", 
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final", 
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final", 
    "System.Net.Http": "4.0.1-beta-23516", 
    "Foo": "1.0.0-beta-1" 
    }, 

    "commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel", 
    "ef": "EntityFramework.Commands" 
    }, 

    "frameworks": { 
    "dnx451": { } 
    }, 

    "exclude": [ 
    "wwwroot", 
    "node_modules" 
    ], 
    "publishExclude": [ 
    "**.user", 
    "**.vspscc" 
    ], 
    "scripts": { 
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ] 
    } 
} 
+0

Как вы строите проекты и можете ли вы поделиться файлом project.json веб-приложения? –

+0

@ VictorHurdugaci 'project.json' добавлен. Ничего экзотического для сборки - я указываю, что хочу, чтобы моя библиотека классов создавала выходные данные в сборке, а затем Right-Click -> Build –

+0

Я просто перестраиваю ваш project.json в одном решении. Здесь нет ошибки сборки. С или без вывода в файл. Мое личное предположение: Foo где-то кэшируется, и ваша сборка попадает в неправильный файл. – Thomas

ответ

1

я следовал той же процедуре, как указано в вашем вопросе

  1. Я создал и библиотеки классов и веб-проект в том же растворе, все работало отлично.

  2. Поскольку вы более сосредоточены на том, чтобы сделать его целью NuGet для пакета dnx451. Я создал другое веб-приложение в отдельном решении, да оно вызывает ошибки, потому что NuGet-пакеты называются многими «Foo». Я думаю, из-за этого восстановление пакетов задано вопросом, поскольку оно ссылается на канал Global NuGet.

  3. Затем я попытался в виду пакет «Foo» NuGet локально, используя эту ссылку How to install a Nuget Package .nupkg file locally?

  4. Убедитесь, что вновь создать локальный источник пакет должен быть на вершине и Offical NuGet второе место.

  5. После этого я восстановил веб-приложение в отдельном решении, оно построено отлично и работает правильно также. Даже я установил этот NUGET в приложениях консоли также

Надеюсь, что это сработает.

+0

Это, вероятно, то, что вам нужно сделать. Кроме того, я считаю, что правильной основой для проектов библиотеки классов является 'net451', а не' dnx451'. Поскольку библиотеки классов не имеют точки входа в dnx, такие как веб-приложения и консоли. – danludwig

+0

@ danludwig Я предполагаю, что net451 и dnx451 предназначены для обозначения имен для целевой среды и ее зависимостей. Я прав? –

+0

Оказывается, у меня было несколько вопросов, первое, как @danludwig, указывало, что мне нужно настроить «net451» для библиотеки классов - моя собственная ошибка за попытку сделать что-то вручную! Мне также нужно было увеличить номер версии и перестроить до повторной установки. –

0

Библиотека классов также должны иметь свой собственный project.json и определить рамки, которые он поддерживает:

"frameworks": { 
    "dnx451": { } 
} 
+0

Вопрос уже детализирует библиотеку 'package.json' ... Он указывает структуру, которую вы написали. –

0

Не добавляйте номер версии, если вы добавляете ссылку на проект, потому что он будет искать пакет на любом канале Nugget.

Просто добавьте ссылку на Foo, как это:

"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final", 
    "System.Net.Http": "4.0.1-beta-23516", 
    "Foo": "" 
    }, 
+0

Я пытаюсь включить это как пакет Nuget, а не как ссылку на проект. Я хотел бы распространять свою работу, но мне нужно понять, как я могу настроить таргетинг. Dnx451 –

+0

Разве это уже распространено на NuGet.org? Если нет, вы не можете использовать ссылку на NuGet. –

+0

Я уверен, что ваша конфигурация в порядке, за исключением ссылки на «Foo» :) Если вы ссылаетесь на нее, как я показал, она по-прежнему будет использовать сгенерированный пакет NuGet, но не из общедоступного канала самородок, а из выходной папки «Foo». –

0

Посмотрите this ответ.

Вы можете добавить ссылку на свой проект библиотеки классов только в том случае, если оба проекта находятся в одном решении.

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

enter image description here

пакет NuGet будет создан в { SolutionDir} \ artifacts \ bin {ProjectName} {Configuration} для каждой сборки проекта.

Чтобы использовать эту библиотеку, опубликуйте пакет NuGet до nuget.org или любого другого фида NuGet и добавьте его в свой проект с помощью Visual Studio (ссылки ~> Управление пакетами NuGet ...) или свойства зависимостей в project.json.

+0

В моем оригинальном посте я делаю все это. У меня нет проблем с созданием или ссылкой на пакет Nuget, моя проблема в том, что я не могу сделать пакет совместимым с фреймворком 'dnx451'. –

+0

Являются ли проекты в одном решении? –

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