MySolution.sln - MySolution.Client.csproj - MySolution.Service.csproj - MySolution.Models.csproj - MySolution.Server.xproj
MySolution.Models是一个简单的类库,它包含由MySolution.Client和MySolution.Service引用的共享代码 – 我想在MySolution.Server中引用它.
VS 2015 RC1中的GUI可以通过右键单击引用添加引用 – >添加参考.然后我看到我所有的项目在项目 – >解.
我选择MySolution.Models,然后单击确定,之后我在输出日志中收到以下错误:
Errors in ...PathToSolution\MySolution.Server\project.json Unable to locate MySolution.Models >= 1.0.0-*
真的觉得这样应该工作,因为GUI允许我添加引用而没有任何打嗝.
解决方法
当您添加对“遗产”的引用(我使用遗产来表示基于.net 4.x csproj的项目)幕后,IDE将运行dnu wrap,但是在您的情况下,它看起来像是一些破裂.
以下应自动完成.
>在解决方案root global.json中应该添加一个文件夹“wrap”
项目财产.
>如果不存在,将创建一个名为“wrap”的根文件夹.
>将使用程序集(dll)的路径创建/更新/wrap/project.json.
>将引用项目的project.json文件的程序集和版本的引用添加到引用项目的project.json文件中.
所以首先要检查的是确保你有一个“wrap”文件夹,并在solution.json的项目属性中包装引用.如果你不那么可能会有一些“破裂”.尝试删除参考重建并将引用添加回来.检查构建输出窗口是否有任何错误(VS仍然是RC,所以有一些错误,可能应该停止,不是).
在wrap文件夹中查找一个project.json.它应该看起来像这样:
{ "version": "1.0.0-*","frameworks": { "net452": { "wrappedProject": "../../LegacyClassLibrary/LegacyClassLibrary.csproj","bin": { "assembly": "../../LegacyClassLibrary/obj/{configuration}/LegacyClassLibrary.dll","pdb": "../../LegacyClassLibrary/obj/{configuration}/LegacyClassLibrary.pdb" } } } }
注意框架版本.如果存在不匹配,那么它将失败解决依赖关系.例如,如果您的MySolution.Models目标.Net 4.6,因此当包装有一个dnx46框架引用,但您的MySolution.Server项目有一个引用dnx452(在project.json中为MySolution.Server),那么它将失败,当解析依赖到MySolution.Models.
你引用的可能会有所改善.这意味着由于以下原因之一,它无法解决依赖问题
>它根据它使用的路径(从global.json中的projects参数开始)找不到MySolution.Models程序集(源代码或编译的dll).
>它发现了一个MySolution.Models程序集(源代码或编译)但是这是一个无效的版本.检查Models项目中的版本与Server project.json中的引用.
>它发现了一个MySolution.Models程序集,但它无法解析框架依赖关系(即Model需要dnx46但Server仅定位到dnx452).
在我的经验中,第三个如果是最常见的.对于VS 2015 RC中的DNX模板,目标的默认完整框架是dnx452(或者是dnx451?).默认情况下,新的csproj项目将为4.6(dnx46),现有项目可能只是任何事情.
一个替代解决方案:
我发现以下替代方案导致更容易的依赖关系管理.如果MySolution.Models仅由DNX项目使用,那么只需将其转换为DNX项目,将其移动到源文件夹并直接引用.它将是源编译的一部分,您将获得动态编译的好处.
如果MySolution.Models将由DNX和旧版(csproj)项目引用,那么您可以为“模型”创建一个并行的xproj和project.json文件.遗留项目将被忽略.实质上,您同时拥有使用相同源文件的旧版DNX项目.你可以直接像上面的引用.如果models文件夹不在/ src下,请记住文件夹结构(如果这是一个现有项目可能不是这样),那么您将需要移动它或添加对global.json中的文件夹的引用.这听起来更令人困惑,它真的是.只要记住一个DNX项目,global.json定义了DNX可以找到源代码的相对路径. DNX还可以通过nuget或者搜索GAC来解决依赖关系,但这超出了你想要做的事情.