.net core 为什么';NET Core和xUnit能识别我导入的名称空间吗?

.net core 为什么';NET Core和xUnit能识别我导入的名称空间吗?,.net-core,xunit.net,.net Core,Xunit.net,我有一个编译的项目,我想用xUnit测试它。然而,尽管项目允许我添加引用和构建,但只要我向测试类添加using语句,我就会得到红色的曲线,错误是“找不到类型或名称空间” 即使我要测试的项目的xproj已经添加到引用中,并且名称空间确实存在。一定是我做了什么,但我看不出是什么。使用.net的早期版本,我已经添加了数百次对测试项目的引用,没有任何问题 那么.NET的工作方式有什么不同,为什么它不能识别引用程序集中的名称空间呢 更新:我已删除xUnit并使MSTest正常工作,但我遇到了相同的问题。因

我有一个编译的项目,我想用xUnit测试它。然而,尽管项目允许我添加引用和构建,但只要我向测试类添加
using
语句,我就会得到红色的曲线,错误是“找不到类型或名称空间”

即使我要测试的项目的xproj已经添加到引用中,并且名称空间确实存在。一定是我做了什么,但我看不出是什么。使用.net的早期版本,我已经添加了数百次对测试项目的引用,没有任何问题

那么.NET的工作方式有什么不同,为什么它不能识别引用程序集中的名称空间呢


更新:我已删除xUnit并使MSTest正常工作,但我遇到了相同的问题。因此,这可能是我设置dotnetcore的方式的一个特点,json文件中的引用比其他任何东西都重要。

这种结构在.NET Core 1.0中适用:

global.json

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}
{
  "dependencies": { },
  "frameworks": {
    "netstandard1.3": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },
  "version": "1.0.0"
}
{
  "dependencies": {
    "dotnet-test-xunit": "2.2.0-preview2-build1029",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "MyLibrary": {
      "target": "project",
      "version": "1.0.0"
    },
    "xunit": "2.1.0"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },
  "testRunner": "xunit",
  "version": "1.0.0"
}
src/MyLibrary/project.json

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}
{
  "dependencies": { },
  "frameworks": {
    "netstandard1.3": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },
  "version": "1.0.0"
}
{
  "dependencies": {
    "dotnet-test-xunit": "2.2.0-preview2-build1029",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "MyLibrary": {
      "target": "project",
      "version": "1.0.0"
    },
    "xunit": "2.1.0"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },
  "testRunner": "xunit",
  "version": "1.0.0"
}
test/MyLibrary.test/project.json

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}
{
  "dependencies": { },
  "frameworks": {
    "netstandard1.3": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },
  "version": "1.0.0"
}
{
  "dependencies": {
    "dotnet-test-xunit": "2.2.0-preview2-build1029",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "MyLibrary": {
      "target": "project",
      "version": "1.0.0"
    },
    "xunit": "2.1.0"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },
  "testRunner": "xunit",
  "version": "1.0.0"
}

使用此目录和项目结构,Visual Studio测试资源管理器和
dotnet测试都可以运行,并且可以运行xUnit测试。

查看
project.json
和相关代码会很有帮助。我的猜测是,您没有正确地引用测试项目中的主项目。您是否在project.json中使用
target:project
?(参见我回答中的示例)我将您对json文件的建议直接剪切粘贴到我的项目中,但我遇到了同样的问题。当我在测试项目中添加对我的类型的引用时,我在名称空间下得到了红色的曲线,我无法引用项目中任何有用的内容。一位同事建议他们读到xUnit和MSTest还不能处理从web项目导入的程序集。这是我需要研究的东西,但如果是真的,那么对于发布团队来说,这是一个重大的失礼IMO@Matt运行
dotnet restore
时会发生什么情况?编译时会发生什么?还原完成得很好。只是一些关于锁定文件不变的注释,尽管它也恢复了Iisintegration.Tools。编译-如果通过使用导入名称空间,我会得到CS2046-类型或名称空间错误。如果我把它们评论出来,一切都好。无论发生什么情况,基本断言都可以正常运行(Assert.Equal(2,2);