Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用csc.exe编译期间,我的朋友程序集示例中有什么错误?_C#_.net - Fatal编程技术网

C# 在使用csc.exe编译期间,我的朋友程序集示例中有什么错误?

C# 在使用csc.exe编译期间,我的朋友程序集示例中有什么错误?,c#,.net,C#,.net,我用C#中的友元程序集做了一个简单的例子 这是AssemblyA.dll的代码: using System; using System.Runtime.CompilerServices; [assembly:InternalsVisibleToAttribute("AssemblyB")] internal class Claseinternal { internal void MetodoUno() { Console.WriteLine("MetodoUno

我用C#中的友元程序集做了一个简单的例子

这是AssemblyA.dll的代码:

using System;
using System.Runtime.CompilerServices;

[assembly:InternalsVisibleToAttribute("AssemblyB")]
internal class Claseinternal
{
    internal void MetodoUno()
    {
        Console.WriteLine("MetodoUno");
    }

    private void MetodoDos()
    {
        Console.WriteLine("MetodoDos");
    }
}

public class ClasePublica
{
    private void MetodoTres()
    {
        Console.WriteLine("MetodoTres");
    }

    internal void MetodoCuatro()
    {
        Console.WriteLine("MetodoCuatro");
    }

    private void MetodoCinco()
    {
        Console.WriteLine("MetodoCinco");
    }
}
我编译它:

csc /target:library AssemblyA.cs
另一方面,这是AssemblyB.dll:

using System;

public class ClaseFriend
{
    public void MetodoPrueba()
    {
        ClasePublica cp = new ClasePublica();
        Claseinternal ci = new Claseinternal();

        ci.MetodoUno();
        ci.MetodoDos();

        cp.MetodoTres();
        cp.MetodoCuatro();
        cp.MetodoCinco();
    }
}
汇编:

csc /target:library /reference:AssemblyA.dll AssemblyB.cs
并生成以下错误:

我的C#代码示例或编译器参数有什么问题


提前谢谢

我认为在直接与csc建立关系时,这是一个困难。从:

编译将访问另一个程序集(程序集A)的内部类型或内部成员的程序集(程序集B)时,必须使用/out编译器选项显式指定输出文件(.exe或.dll)的名称。这是必需的,因为编译器在绑定到外部引用时尚未生成它正在生成的程序集的名称。有关详细信息,请参见/out(C#)和/out(Visual Basic)

您尚未使用/out标志。我相信您需要命令行:

csc /target:library /out:AssemblyA.dll AssemblyA.cs 
csc /target:library /reference:AssemblyA.dll /out:AssemblyB.dll AssemblyB.cs

如果您使用Visual Studio,它将自动处理此问题,这会更容易。

我认为直接使用csc构建时,这是一个困难。从:

编译将访问另一个程序集(程序集A)的内部类型或内部成员的程序集(程序集B)时,必须使用/out编译器选项显式指定输出文件(.exe或.dll)的名称。这是必需的,因为编译器在绑定到外部引用时尚未生成它正在生成的程序集的名称。有关详细信息,请参见/out(C#)和/out(Visual Basic)

您尚未使用/out标志。我相信您需要命令行:

csc /target:library /out:AssemblyA.dll AssemblyA.cs 
csc /target:library /reference:AssemblyA.dll /out:AssemblyB.dll AssemblyB.cs

如果您使用Visual Studio,它会自动处理此问题,这会更容易。

我喜欢使用纯文本代码编辑器(Notepad++)编写。更正:csc/target:library/out:AssemblyA.dll AssemblyA.cs csc/target:library/reference:AssemblyA.dll/out:AssemblyB.dll AssemblyA。cs@JohnOrtizOrdoñez Ok已修复。如果您不想在VS这样的重量级环境中使用C#,您可能会感兴趣。我喜欢使用纯文本代码编辑器(Notepad++)编写。更正:csc/target:library/out:AssemblyA.dll AssemblyA.cs csc/target:library/reference:AssemblyA.dll/out:AssemblyB.dll AssemblyA。cs@JohnOrtizOrdoñez Ok已修复。如果您不想在像VS这样的重量级环境中使用C#,您可能会感兴趣。