2014-11-19 14 views
20

Stavo giocando con VS2015 e ASP.NET vNext e mi sono bloccato sul tentativo di aggiungere un riferimento dalla libreria di classi vNext (kproj) ad una normale libreria di classi (csproj) nella stessa soluzione. Visual Studio 2015 mostra il seguente messaggio di errore:Come fare riferimento a csproj da kproj

"The following projects are not supported as references".

E 'possibile a tutti di aggiungere riferimenti a csproj da librerie di classi vNext?

risposta

23

Nota: il comando kpm è stato sostituito da dnu.

Anteprima di Visual Studio 2015 (al momento della stesura di questo) viene fornito con la versione stabile beta1 di ASP.NET 5. In questa versione non è possibile fare riferimento a un progetto csproj da un progetto ASP.NET 5.

Tuttavia, nel feed di sviluppo di ASP.NET 5 è stato introdotto il comando kpm wrap per supportare il riferimento ai progetti csproj dai progetti ASP.NET 5. Vedere il github issue #827 nel repository aspnet/KRuntime e pull request #875 che chiude il problema.

Ecco un esempio di come si usa kpm wrap:

Assicurarsi che la versione più recente del KRuntime is installed (controllare questo con il comando kvm list) (Ho provato questo con la versione 1.0.0-beta2-10709).

Creare un progetto di libreria di classi ASP.NET 5, ho utilizzato il nome ClassLibrary1.

Creare una libreria di classi "normale" csproj, ho chiamato questo ClassLibrary2 (assicurati di inserirlo nella cartella src).

dalla linea di comando, dal solutiondirectory eseguire il comando

kpm wrap .\src\ClassLibrary2

Questo dà l'output:

Wrapping project 'ClassLibrary2' for '.NETFramework,Version=v4.5' 
Source C:\Users\andersns\Source\ClassLibrary1\src\ClassLibrary2\ClassLibrary2.csproj 
    Target C:\Users\andersns\Source\ClassLibrary1\wrap\ClassLibrary2\project.json 
    Adding bin paths for '.NETFramework,Version=v4.5' 
    Assembly: ../../src/ClassLibrary2/obj/debug/ClassLibrary2.dll 
    Pdb: ../../src/ClassLibrary2/obj/debug/ClassLibrary2.pdb 

Ora, nel project.json di ClassLibrary1 (che è ASP. NET 5) è possibile aggiungere un riferimento a ClassLibrary2 con questo:

... 
"dependencies": { 
    "ClassLibrary2": "" 
}, 
... 

Nota: kpm wrap non è stato eseguito correttamente per me con cmd, avevo bisogno di avviare PowerShell per farlo funzionare.

+5

Man @ AndersNS, sei sanguinante :). Stiamo ancora risolvendo i problemi con esso e stiamo anche lavorando per integrarlo nella finestra di dialogo Aggiungi riferimento visivo dello studio. – davidfowl

+0

PS> KPM involucro System.Exception: TODO: Errore: non riconosciuta argomento 'wrap' Microsoft.Framework.Runtime.Common.CommandLine.CommandLineApplication.HandleUnexpectedArg (CommandLineApplication co mmand, String [] args, indice Int32, String argTypeName) Microsoft.Framework.Runtime.Common.CommandLine.CommandLineApplication.Execute (String [] args) Microsoft.Framework.PackageManager.Program.Main (String [] args) – RouR

+0

Come eseguire l'aggiornamento a 1.0.0-beta2-10709? PS> kvm upgrade Determinazione dell'ultima versione KRE-CLR-x86.1.0.0-beta1 già installata. Aggiunta di C: \ Users \ user \ .kre \ packages \ KRE-CLR-x86.1.0.0-beta1 \ bin per elaborare PATH Aggiunta di C: \ Users \ user \ .kre \ packages \ KRE-CLR-x86. 1.0.0-beta1 \ bin all'utente PATH Aggiornamento alias 'default' a 'KRE-CLR-x86.1.0.0-beta1' – RouR

3

Ho trovato più semplice creare semplicemente un .kproj corrispondente per il file .csproj che voglio fare riferimento. Il .kproj non richiede l'elencazione di ogni file incluso, quindi questo è piuttosto semplice.

È possibile creare YourProject.kproj come file di testo con i seguenti contenuti e sostituire solo [REPLACE_WITH_UNIQUE_GUID] e [ROOT_NAMESPACE].

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    </PropertyGroup> 
    <Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.Props" Condition="'$(VSToolsPath)' != ''" /> 
    <PropertyGroup Label="Globals"> 
    <ProjectGuid>[REPLACE_WITH_UNIQUE_GUID]</ProjectGuid> 
    <RootNamespace>[ROOT_NAMESPACE]</RootNamespace> 
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath> 
    <OutputPath Condition="'$(OutputPath)'=='' ">..\artifacts\bin\$(MSBuildProjectName)\</OutputPath> 
    </PropertyGroup> 
    <PropertyGroup> 
    <SchemaVersion>2.0</SchemaVersion> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> 
    <ProduceOutputsOnBuild>True</ProduceOutputsOnBuild> 
    </PropertyGroup> 
    <Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" /> 
</Project> 

È quindi possibile aggiungere questo progetto alla soluzione e fare riferimento al progetto MVC 6.

0

In aggiunta a questa risposta ho scoperto che è necessario utilizzare la direttiva se (# if) per effettuare la chiamata senza errori:

qualcosa di simile:

#if ASPNET50 
using class2 
#endif 

Quando lo si utilizza in una chiamata che devi fare lo stesso.

#if ASPNET50 
    ViewBag.Message = class2.Class1.Greetings() 
#endif 
+0

: controllare http://stackoverflow.com/questions/27537496/vnext-cant-see-namespace-in-referenced-package. Se si rimuove nel project.json il framework ASPNET50CORE non è necessario utilizzare quella direttiva brutto :) –

Problemi correlati