C# 找不到名为';JoinString';在DLL中';Dll.Dll';。在C中#

C# 找不到名为';JoinString';在DLL中';Dll.Dll';。在C中#,c#,dll,dllimport,C#,Dll,Dllimport,我在c#中创建了一个dll,您可以通过此方法看到: namespace Dll { public class Check { public string JoinString(string fristName, string Lastname) { return fristName + " " + Lastname; } } } 我构建了这个DLL,我想在另一个应用程序中使用它,如您在这里看到的

我在c#中创建了一个dll,您可以通过此方法看到:

namespace Dll
{
    public class Check
    {

        public string JoinString(string fristName, string Lastname)
        {

            return fristName + " " + Lastname;
        }
    }
}
我构建了这个DLL,我想在另一个应用程序中使用它,如您在这里看到的:

 [DllImport("Dll.dll", EntryPoint = "JoinString")]
    public static extern string JoinString (string fristName, string Lastname);
    private void button1_Click(object sender, EventArgs e)
    {
        string s = JoinString("aaa", "bbbb");

        MessageBox.Show(s.ToString());


    }
但我得到了这个错误:

An unhandled exception of type 'System.EntryPointNotFoundException' occurred in WindowsFormsApplication3.exe

Additional information: Unable to find an entry point named 'JoinString' in DLL 'Dll.dll'.
根据MSDN:

DllImportAttribute:表示属性化方法由非托管动态链接库(DLL)作为静态入口点公开


您的DLL名称空间似乎是用C#编写的,C#是托管代码。这将导致一个托管dll。相反,您应该添加对dll项目的引用,或者利用nuget将dll安装到其他项目中。

我必须使用它进行dll导入。那么我如何才能更改为非托管代码?C完全是托管代码。你必须在C++或C中使用这个库来使用DLILILATATIRTBUTE。请看下面的线索:似乎有一个解决办法,但我从来没有必要这样做,也无法提供可靠的答案。你为什么要使用DllImport?因为我的dll每周都会更改。因此,使用DllImport,我可以替换新的dll。你只需将dll替换到位,它就会被使用。此外,无需对自己的dll使用nuget,只需添加对项目或原始dll的引用。只要您没有对程序集进行强命名,那么您只需使用较新版本进行替换,并且只要该类存在于命名空间中且方法都向后兼容,一切都可以正常工作。MEF或反射在这里绝对是过火了。