【问题标题】:Missing a using directive缺少 using 指令
【发布时间】:2019-07-09 12:21:45
【问题描述】:

C# 新手,正在尝试编写测试程序。 但是,我收到以下错误:

TypeTests.cs(30,41):错误 CS0246:类型或命名空间名称“书” 找不到(您是否缺少 using 指令或程序集 参考?) [C:\dev\gradebook\test\GradeBook.tests\GradeBook.tests.csproj] TypeTests.cs(45,37):错误 CS0246:类型或命名空间名称“书” 找不到(您是否缺少 using 指令或程序集 参考?) [C:\dev\gradebook\test\GradeBook.tests\GradeBook.tests.csproj] TypeTests.cs(86,9):错误 CS0246:类型或命名空间名称“书” 找不到(您是否缺少 using 指令或程序集 参考?) [C:\dev\gradebook\test\GradeBook.tests\GradeBook.tests.csproj]

尝试重建并重新添加 xunit

using System;
using Xunit;

namespace GradeBook.tests
{
    public class TypeTests
    {
         [Fact]
         public void Test1() 
         {
             var x = GetInt();

             Assert.Equal(3, x);
         }

         private int GetInt() 
         {
             return 3;
         }

         [Fact]
        public void CSharpCanPassByRef()
        {
            var book1 = GetBook("Book 1");
            GetBookSetName(ref book1, "New Name");

            Assert.Equal("Book 1", book1.name);

        }
        private void GetBookSetName(ref Book book, string name) 
        {
            book = new Book(name); 
        }

         [Fact]
        public void CSharpIsPassByValue()
        {
            var book1 = GetBook("Book 1");
            GetBookSetName(book1, "New Name");

            Assert.Equal("Book 1", book1.name);

        }

        private void GetBookSetName(Book book, string name) 
        {
            book = new Book(name);

        }
        [Fact]
        public void CanSetNameFromReference()
        {
            var book1 = GetBook("Book 1");
            SetName(book1, "New Name");

            Assert.Equal("New Name", book1.name);

            }

        private void SetName(BookTests book, string name) 
        {
            book.Name = name;
        }
        [Fact]
        public void GetBookReturnDifferentObject() 
        {
            var book1 = GetBook("Book 1");
            var book2 = GetBook("Book 2");

            Assert.Equal("Book1", book1.name);
            Assert.Equal("Book2", book2.name);
            Assert.NotSame(book1, book2);
        }


        [Fact]
        public void TwoVarsCanReferenceSameObject()
        {
            var book1 = GetBook("Book 1");
            var book2 = book1;

            Assert.Same(book1, book2);
            Assert.True(Object.ReferenceEquals(book1, book2));
        }

        Book GetBook(string name) 
        {
            return new Book(name);
        }
    }
}

【问题讨论】:

  • 您正在尝试使用名为Book 的类。你在哪里定义它? (尽管值得注意的是,您的错误消息使用 小写 名称 book,而不是类名称 Book。这是您的错误吗?具体一点很重要。)
  • 如果类型(类/结构)未定义,您将看到该错误。正如@David 所提到的,.NET 代码通常对类型名称和命名空间使用 pascal 大小写,所以我建议你的命名空间是 GradeBook.Tests(所以你可能希望在创建这个项目时这样做)并使用 @ 987654326@ 当你定义它。奇怪的是,当您的示例代码仅使用 new Book 时,错误正在寻找小写的 book...
  • 要定义您缺少的Book 类,您可以在命名空间声明中的同一文件或另一个文件中执行此操作。如果在另一个文件中,如果它在同一个命名空间中,您的 Test 类将自动能够看到它,否则您需要添加一个 using 来引用另一个命名空间。欢迎使用 C#!
  • 嗨大卫,书在程序中定义:使用系统;使用 System.Collections.Generic; namespace GradeBook { class Program { static void Main(string[] args) { var book = new Book("Joe's Gradebook"); book.AddGrade(89.1); book.AddGrade(90.5); book.AddGrade(77.5); book.GetStatistics(); }}} 我在测试和主程序之间设置了一个引用。
  • 那不是Book的定义,那是Book类型对象的实例化。类Book 定义在哪个命名空间中?您需要在引用它的其他文件中添加using NameSpaceOfBook; 指令。

标签: c# directive using


【解决方案1】:

要解决这个问题,你需要引用你的项目

  1. 在您的终端添加 dotnet 添加参考

例子

dotnet add reference <PROJECT> ..\..\src\GradeBook\GradeBook.csproj
  1. 检查你的cs文件并查看创建类public class Book的命名空间
  2. 如果命名空间使用GradeBook,那么你的namespace GradeBook.tests需要更改为namespace GradeBook

【讨论】:

    【解决方案2】:

    它对我有用。我从命名空间 GradeBook.Tests 更改为命名空间 Gradebook

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多