20

我在玩VS2015and ASP.NET vNext,并试图在同一解决方案中将 vNext 类库 (kproj) 的引用添加到常规类库 (csproj) 中。Visual Studio 2015 显示以下错误消息:

“不支持以下项目作为参考”。

是否可以从 vNext 类库中添加对 csproj 的引用?

4

4 回答 4

23

注意: kpm 命令已被 dnu 替换。

Visual Studio 2015 预览版(在撰写本文时)随附 ASP.NET 5 稳定版 beta1。在此版本中,无法从 ASP.NET 5 项目中引用 csproj 项目。

但是,在 ASP.NET 5 的开发提要中,kpm wrap引入了该命令以支持从 ASP.NET 5 项目中引用 csproj-projects。请参阅aspnet/KRuntime 存储库中的 github问题 #827和拉取请求 #875以关闭问题。

这是一个如何使用的示例kpm wrap

确保安装了最新版本的KRuntime(用kvm list命令检查)(我用 version 测试过1.0.0-beta2-10709)。

创建一个 ASP.NET 5 类库项目,我使用的名称是 ClassLibrary1。

创建一个“普通”的 csproj 类库,我将其命名为 ClassLibrary2(确保将其放在 src 文件夹中)。

从命令行,从解决方案目录运行命令

kpm wrap .\src\ClassLibrary2

这给出了输出:

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

现在在 ClassLibrary1(即 ASP.NET 5)的 project.json 中,您可以添加对 ClassLibrary2 的引用:

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

注意:kpm wrap使用 cmd 无法正常运行,我需要启动 powershell 才能运行。

于 2014-11-19T21:04:17.383 回答
11

从(Visual Studio 2015 RC)开始,kpm命令已被dnu替换

dnu 命令代表(.NET 开发实用程序)

dnu wrap .\src\ClassLibrary2\ClassLibrary2.csproj

Visual Studio 2015 RC 中的新 ASP.NET 功能和修复 http://blogs.msdn.com/b/webdev/archive/2015/04/29/new-asp-net-features-and-fixes-in-visual- studio-2015-rc.aspx

于 2015-04-30T16:37:02.250 回答
3

我发现为我想要引用的 .csproj 创建一个相应的 .kproj 是最简单的。.kproj 不需要列出每个包含的文件,所以这相当简单。

您可以将 YourProject.kproj 创建为具有以下内容的文本文件,并且仅替换 [REPLACE_WITH_UNIQUE_GUID] 和 [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>

然后,您可以将此项目添加到您的解决方案中,并从您的 MVC 6 项目中引用它。

于 2014-12-19T03:55:32.643 回答
0

除了这个答案,我发现您需要使用 if 指令 (#if) 来进行无错误的调用:

就像是:

#if ASPNET50 
 using class2
#endif

当您在通话中使用它时,您也需要这样做。

#if ASPNET50
   ViewBag.Message = class2.Class1.Greetings()
#endif
于 2015-02-06T15:25:34.140 回答