C# 如何从kproj中引用csproj
我在玩C# 如何从kproj中引用csproj,c#,asp.net-core,visual-studio-2015,C#,Asp.net Core,Visual Studio 2015,我在玩VS2015和ASP.NET vNext,在同一个解决方案中,我一直在尝试将vNext类库(kproj)的引用添加到常规类库(csproj)中。Visual Studio 2015显示以下错误消息: “不支持以下项目作为参考” 是否可以从vNext类库添加对csproj的引用?注意:kpm命令已被dnu替换 Visual Studio 2015预览版(在撰写本文时)附带ASP.NET 5稳定版beta1。在此版本中,无法从ASP.NET 5项目中引用csproj项目 然而,在ASP.NET
VS2015
和ASP.NET vNext
,在同一个解决方案中,我一直在尝试将vNext类库(kproj)的引用添加到常规类库(csproj)中。Visual Studio 2015显示以下错误消息:
“不支持以下项目作为参考”
是否可以从vNext类库添加对csproj的引用?注意:kpm命令已被dnu替换 Visual Studio 2015预览版(在撰写本文时)附带ASP.NET 5稳定版beta1。在此版本中,无法从ASP.NET 5项目中引用csproj项目 然而,在ASP.NET 5的开发提要上,引入了命令
kpm wrap
,以支持从ASP.NET 5项目中引用csproj项目。请参阅aspnet/KRuntime存储库中的github,它关闭了问题
下面是一个如何使用kpm wrap
的示例:
确保最新版本的(使用kvm list
命令检查)(我使用版本1.0.0-beta2-10709
测试了此)
创建一个ASP.NET 5类库项目,我使用了ClassLibrary1这个名称
创建一个“普通”csproj类库,我将其命名为ClassLibrary2(请确保将其放在src文件夹中)
从命令行,从解决方案目录运行命令
kpm包装。\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使其运行 我发现简单地为我要引用的.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>
14
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
[用\u唯一\u GUID替换\u]
[根目录名称空间]
..\artifacts\obj\$(MSBuildProjectName)
..\artifacts\bin\$(MSBuildProjectName)\
2
真的
然后,您可以将此项目添加到解决方案中,并从您的MVC 6项目中引用它。除此之外,我发现您需要使用if指令(#if)进行调用,而不会出现错误: 比如:
#if ASPNET50
using class2
#endif
当你在通话中使用它时,你也需要这样做
#if ASPNET50
ViewBag.Message = class2.Class1.Greetings()
#endif
从(Visual Studio 2015 RC)开始,kpm命令已被dnu
dnu命令代表(.NET开发实用程序)
Visual Studio 2015 RC中新的ASP.NET功能和修复程序
Man@AndersNS,你是最前沿的:)。我们仍在修复它的问题,并正在将其集成到visual studio Add Reference dialog.PS>kpm wrap系统中。异常:TODO:错误:无法识别的参数“wrap”Microsoft.Framework.Runtime.Common.CommandLine.CommandLineApplication.HandleUnexpectedArg(CommandLineApplication命令,字符串[]args,Int32索引,字符串argTypeName)Microsoft.Framework.Runtime.Common.CommandLine.CommandLineApplication.Execute(字符串[]args)Microsoft.Framework.PackageManager.Program.Main(字符串[]args)如何升级到1.0.0-beta2-10709?PS>kvm升级确定已安装最新版本KRE-CLR-x86.1.0.0-beta1。将C:\Users\user\.kre\packages\kre-CLR-x86.1.0.0-beta1\bin添加到进程路径将C:\Users\user\.kre\packages\kre-CLR-x86.1.0.0-beta1\bin添加到用户路径将别名“default”更新为“kre-CLR-x86.1.0.0-beta1”,工具最终将支持相反的场景,让旧类库引用ASP.NET 5库,例如,除了aspnet50x框架之外,他们还瞄准net45?我知道这可以更手动地完成,但如果可能的话,能够在混合解决方案中让所有的东西都发挥作用,那就太好了。@Adam不确定这将如何工作,因为net45目标框架是如何工作的,而aspnet5是如何工作的。也许在将来?用这个有趣的问题开始另一个问题更新:请检查。如果在project.json中删除framework ASPNET50CORE,则无需使用该丑陋指令:)
dnu wrap .\src\ClassLibrary2\ClassLibrary2.csproj