加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 从与xproj相同的解决方案引用csproj

发布时间:2020-12-15 22:41:06 所属栏目:asp.Net 来源:网络整理
导读:我有一个解决方案与以下项目: MySolution.sln - MySolution.Client.csproj - MySolution.Service.csproj - MySolution.Models.csproj - MySolution.Server.xproj MySolution.Models是一个简单的类库,它包含由MySolution.Client和MySolution.Service引用的共
我有一个解决方案与以下项目:
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 ...PathToSolutionMySolution.Serverproject.json
    Unable to locate MySolution.Models >= 1.0.0-*

真的觉得这样应该工作,因为GUI允许我添加引用而没有任何打嗝.

解决方法

所以首先要了解的是DNX项目对传统的.net项目并不了解.他们不读取或解析csproj文件.这样做是为了保持他们跨平台和跨IDE兼容(csproj是一个明显的Windows和VS具体的东西).

当您添加对“遗产”的引用(我使用遗产来表示基于.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来解决依赖关系,但这超出了你想要做的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读