Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
.net 是否有通配符排序功能,可以使内部构件对与公共程序集名称匹配的程序集可见?_.net - Fatal编程技术网

.net 是否有通配符排序功能,可以使内部构件对与公共程序集名称匹配的程序集可见?

.net 是否有通配符排序功能,可以使内部构件对与公共程序集名称匹配的程序集可见?,.net,.net,是否有一种通配符类型的功能,可以使共享公共程序集的主要名称(我的英语不及格)的程序集可以看到内部构件 例如,The.Empire是所有程序集的主要名称。我尝试了.Empire.,但没有成功 大会A [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.*")] namespace The.Empire { internal static class Constants {

是否有一种通配符类型的功能,可以使共享公共程序集的主要名称(我的英语不及格)的程序集可以看到内部构件

例如,
The.Empire
是所有程序集的主要名称。我尝试了.Empire.,但没有成功

大会A

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.*")]


namespace The.Empire
{
    internal static class Constants
    {
        internal readonly static string CommonId = "Luke";
    }
}
大会B

namespace The.Empire.Strikes
{
    public class Mate
    {
        public void AccessSomething()
        {
            Console.WriteLine("{0}", Constants.CommonId); // inaccessible
        }
    }
}
装配C

namespace The.Empire.Back
{
    public class Mate
    {
        public void AccessSomething()
        {
            Console.WriteLine("{0}", Constants.CommonId); // inaccessible
        }
    }
}
这可能吗?在OOP继承类比中,类似于受保护的,只有派生程序可以访问受保护的

如果我将特定的程序集名称放在InternalsVisibleTo上,它就不是松耦合。除非我重新编译AssemblyA,否则无法满足程序集A的其他实现者的需求

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.Strikes")]
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("The.Empire.Back")]
建议指定多个程序集的唯一方法是使用多个属性或在单个属性中使用多个名称:

您可以用两种方式定义多个好友程序集。它们可能会出现 作为单个程序集级属性。。。[或者它们]也可以出现 具有单独的内部属性标记,但只有一个程序集 关键词

即:

[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
或:

我认为你想要的是不可能的,而且很可能是有意的。使您的内部构件对另一个组件可见是应该节约使用的事情,因为它允许比其他方式更需要的耦合。因此,应该很难显示内部构件,除非您完全有意将其显示给给定的组件。通配符有效地解决了这一问题


您最好的选择(如果不想使用多个属性)是a)合并程序集,以便它们可以自然地共享
内部
s或b)使某些键
内部
成员
公开
(或
受保护
)并将其作为其他程序集的集成点。

内部
旨在减少在实现细节上耦合的可能性
InternalsVisibleTo
旨在放宽强相关程序集的限制,这些程序集应该有自己的程序集,但仍然与其他程序集强耦合。你所描述的不符合这个模式。你想要解决的更高层次的目标是什么?其他技术可能对您更有效(例如,仍将定义保留在内部,但将其作为源文件而不是程序集(例如,构建版本常量)公开给使用代码),我还有一个用例:我有几个单元测试项目,而不是单独指定每个程序集,我只想要“MyNamespace.*.UnitTests”。
[assembly:InternalsVisibleTo("Friend2a"), 
          InternalsVisibleTo("Friend2b")]