【问题标题】:Create and Using DLL in same Project in c#在 C# 中的同一项目中创建和使用 DLL
【发布时间】:2015-05-05 06:53:02
【问题描述】:

我有一个 DLL 文件。使用 DLL,我必须调用方法并在我的项目中添加更多方法。现在,我需要迁移旧的 DLL 以将该项目作为新的 DLL。我这样做了但问题是 C# 代码被转换为 net 模块它显示两个错误。我不清楚。请帮我解决这个问题。

DLL 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mcMath
{
public class mcMathComp
{
    private bool bTest = false;

    public mcMathComp()
    {
        // TODO: Add constructor logic here
    }

    /// <summary>
    /// //This is a test method
    /// </summary>
    public void mcTestMethod()
    { }

    public long Add(long val1, long val2)
    {
        return val1 - val2;
    }

    /// <summary>
    /// //This is a test property
    /// </summary>
    public bool Extra
    {
        get
        {
            return bTest;
        }
        set
        {
            bTest = Extra;
        }
    }
}

}

CS 项目:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using mcMath;

namespace mcClient
 {
        class Program
        {

            static void Main(string[] args)
            {
                mcMathComp cls = new mcMathComp();
                long lRes = cls.Add(23, 40);
                cls.Extra = false;
                Console.WriteLine(lRes.ToString());
                Console.ReadKey();

            }
        }
    }

错误:

Program.cs(5,7):错误 CS0246:找不到类型或命名空间名称“mcMath”(您是否缺少 using 指令或程序集引用?)

尝试过的方法:

  1. 我将通过 Project-> Add Reference 添加引用。
  2. 还使用了 using 参考。
  3. 将 DLL 放入当前项目的调试/发布文件夹中

【问题讨论】:

  • 对包含“Add”方法的 DLL 的引用是否显示在项目的引用列表中?它旁边有一个带有感叹号的黄色三角形吗?
  • 你能显示调用 Add 的代码吗?您不能只使用 Add 本身(除非您使用 C# 6 静态使用和静态方法)
  • #Soner Gonul, Yes Dude, 方法可以查看。该项目可能会清理和构建而不会出现错误。但是我把CS文件做成了一个Net模块,就出现了上面的错误。
  • @irreal 这不是编译器会发出的消息,即使 的情况;我不认为失败的代码是 OP 认为的......
  • 这只是让我们回到错误的参考。您显然没有对“Dll 代码”项目的有效引用。你编译过库吗?仔细检查“CS 项目”中是否有对它的引用从添加引用对话框的“解决方案”选项卡中添加它。请注意,您必须选中名称旁边的复选框,而不仅仅是在列表中选择该项目并单击确定。还要仔细检查引用的文件是否实际显示在“CS 项目”的“参考”下的解决方案资源管理器中

标签: c# .net dll netmodules


【解决方案1】:

我猜你曾经将代码并排放置,即

public int Add(int a, int b)
{
    return a + b;
}
public void SomeMethod()
{
    var result = Add(2,3);
}

这是有效的,因为作用域 (this.) 是隐式应用的,并且会将您带到当前实例上的 Add 方法。但是,如果将方法移出,则范围不再隐含。

您将需要以下之一:

  • 类型名称(如果是静态方法)
    • 如果使用 C# 6,则使用静态
  • 如果是实例方法,则引用实例

然后您将使用以下之一(分别):

  • var result = YourType.Add(2,3);(加上顶部的using YourNamespace;
    • using static YourNamespace.YourType; 置顶
  • var result = someObj.Add(2,3);

检查编译器消息,它听起来就像你做了类似的事情(第 7 行):

using YourNamespace.YourType.Add;

这是完全错误的;您不使用 usingmethods 带入范围 - 只有命名空间和(在 C# 6 中)类型。

同样,我怀疑你有(第 22 行):

var result = YourNamespace.YourType.Add(x,y);

这是无效的,因为这不是静态方法。

【讨论】:

  • 老兄,代码运行良好。但是,如果我将 C# 文件创建到网络模块中,则会显示错误。我使用一些测试类来运行它工作正常的方法。
  • @AhamedNafeel 如果无法编译,则代码无法正常工作。这里重要的是,我强调这是我第三次问:你能显示调用 Add 的代码(理想情况下,如何它与Add 相关 - 即它是不同的类型吗?)您可以在 Basic.cs 第 7 行和第 22 行中找到它
  • 使用AddDll;静态无效主(字符串 [] args){ mcMathComp cls = 新 mcMathComp();长 lRes = cls.Add(23, 40); cls.Extra = 假; Console.WriteLine(lRes.ToString()); Console.ReadKey(); }
  • @AhamedNafeel 查看我对您的主要帖子的评论(另外:您真的应该将其编辑到问题中;我已经为您完成了)
  • 我提到了编辑我的主代码的行。问题只出现在第7行。第22个问题可以解决它是一个语法错误。
【解决方案2】:

在 c# 中在同一个项目中创建和使用 DLL

DLL 或类库是一个单独的项目,可以是同一解决方案的一部分。

如您所知,添加对该 dll/项目的引用将使其在您的应用项目中可用。 但是,如果函数 Add in dll 位于不同的命名空间中(这很正常),您需要在类的开头添加 using 子句

【讨论】:

  • 该操作提到“也使用了使用参考”。我希望这意味着他们包含了 using 语句。
  • @Mladen Oršolić,谢谢,对不起伙计。我只使用 Using 子句来调用 DLL。我可以添加引用,也尝试放入当前的 bin/debug 文件夹,但它给出了相同的错误。
  • @AhamedNafeel 自己添加一个using 指令不会让它神奇地工作(尽管using static {Type} 可能,如果它是一个静态方法);目前它是一个实例方法,所以你需要一个目标实例;如果它是静态的,则需要告诉它使用哪种类型(同样,除非 C# 6 中的 static using)。
  • 静态 void Main(string[] args) { mcMathComp cls = new mcMathComp();长 lRes = cls.Add(23, 40); cls.Extra = 假; Console.WriteLine(lRes.ToString()); Console.ReadKey(); }
  • @AhamedNafeel 你能显示第 7 行和第 22 行吗?听起来你把using 指令弄得一团糟;它不应该以.Add 结尾,如果这是你所做的......
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
相关资源
最近更新 更多