【问题标题】:Reference local project in .net vNext when a nuget package of the same name is published发布同名nuget包时在.net vNext中引用本地项目
【发布时间】:2015-03-31 22:16:54
【问题描述】:

我正在尝试使用 VS 2015 中的新 vNext 项目类型构建一个包。

我想在同一个解决方案(不是 vNext)中引用一个项目,但它试图为该项目找到一个 nuget 包,而不是直接引用它。

我做错了什么?

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.AspNet.Mvc": "6.0.0.0-beta2"
    },
    "frameworks": {
        "aspnet50": {
            "dependencies": {
                "React": "" //it cant find a package for this even though I have a project named this in my solution
            }
        },
        "aspnetcore50": {
            "dependencies": {
                "System.Runtime": "4.0.20-beta-22231"
            }
        }
    }
}

项目结构:

Solution Folder
 - src 
   - global.json {"sources": [""]} 
   - React (project folder)
   - My Library (project folder)
 - bin
   - Debug
     - React

【问题讨论】:

  • 我的猜测是您需要为本地程序集实际创建一个 nuGet 包。 vNext
  • @dbugger 所以你不能引用一个本地项目而不把它变成一个nuget包?确定不是这样吗?
  • 我以为你在谈论创建一个包,但从一些阅读来看,似乎 nuGet 方法受到青睐。
  • 如果您使用的是 Visual Studio 2015 CTP5,那么即使它不是 vnext 类型,它也允许您在同一解决方案中添加项目的引用。

标签: c# asp.net asp.net-core


【解决方案1】:

简短回答:您需要将net45 配置添加到您的project.json,然后您可以在其中添加React 依赖项(假设它是net45 二进制文件)。

注意:我已更新简答以反映添加到问题中的新信息。下面的长答案纯粹是信息性的。

依赖解决信息: 需要注意的重要一点是,在 vNext (ASP.NET 5) 中不需要 Visual Studio。因此,我们不能以“它在我的解决方案中”的方式来思考问题,因为这是 Visual Studio 的概念,并且一切都被设计为在 Visual Studio 之外工作。

那么,让我们先来谈谈 vNext 中可以从项目中引用的内容:

  1. 一个包。
  2. 只要有 project.json 的源代码(字面意思是 .cs 文件)。
  3. 一个 dll。

我认为这就是一切,但我可​​能会忘记。

现在这里的美妙之处在于它们的引用都是可以互换的。这意味着您添加的依赖项 "React": "" 可以引用 dll、包或源代码(如果存在冲突,源代码具有最高优先级)。请注意,将版本保留为 "" 本质上意味着“1.0”或源代码。

现在读到这里之后,你可能会想,好吧。很酷,我刚刚写了这个问题,说我有冲突,为什么我的依赖项没有正确解决?因此,首先有两种方法可以为您可以添加依赖项的有效源代码/项目提供位置。

  1. 暗示:尽最大努力自动找到您周围的代码
  2. 指定:提供一个 global.json 来指示在哪里查找源代码。

90% 的时间你应该使用 #2,而 #1 你应该纯粹用于演示 :) 如果可以避免的话。

global.json 去哪里? 在父文件夹中。
global.json 中有什么? 您只需要有效的 json,它可以看起来像这样:

{
    "sources": ["src", "test"]
}

有了这个 global.json,srctest 文件夹中的所有源代码都会被发现。

又名:

- global.json
- /src
-> A.cs
- /test
-> B.cs

此类文件夹结构的示例:https://github.com/aspnet/Mvc

希望这会有所帮助!

【讨论】:

  • 这很有帮助,我更了解 global.json 的工作原理。但是我仍然无法得到我的参考工作。我认为这可能与 bin 文件夹位于一个奇怪的地方有关。我已将文件夹结构添加到我的问题中,并尝试将源指向 bin 文件夹,但它似乎不起作用(例如 ../bin/debug)有什么想法吗?
  • 所以要注意的一点是React 希望是一个 net45 等效项目,因此只能在 project.json 中的 net45 节点中使用。现在看到您的项目结构,您不需要 global.json (它会自动找到您的项目)。更新答案以反映新的细节。
【解决方案2】:

如果您使用 VS2015 CTP,则可以选择自动创建 nuget 包,方法是在项目属性/构建部分检查构建时的生成输出。 nuget 包将在您需要手动推送您的 nuget 服务器的解决方案的工件文件夹中创建。

关于可以添加作为参考的项目有点棘手。这就是我所做的。我创建了 5 个项目 2 使用 vs2013 和 3 使用 vs2015 最后一个是用于测试项目参考的 Web 项目。

仅允许 C# 项目作为参考,目前不支持 VB 项目。假设您有一个在 2013 年创建的类库,您可以将它们添加到您的 VS2015 解决方案中而无需升级(到目前为止),那么您可以将它们添加为对其他 vNext 项目的引用,但不能使用 aspnet5core。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多