2016-02-09 3 views
2

Могу ли я сделать некоторые методы видимыми для конечного пользователя, когда я публикую DLL для сторонних приложений?C# скрывать членов класса при экспорте DLL

Мой код строится на 7-8 различных проектов, которые вызов друг другу, они имеют разные пространства имен, как «Company.ProjectName», который я думаю, связаны в пространстве имен «Компания», и я только хочу один из проектов (который имеет интерфейс, определенный BTW), чтобы быть видимым для внешнего мира.

Каждый проект в решении компилируется в DLL, а затем я объединяю их с помощью ILASM.

Кстати, в решении есть другие проекты, которые не связаны с этой DLL.

Edit: будет работа internal ключевое слово, даже если пространство имен построены как "CompanyName.Project1", "CompanyName.Project2"? Они будут видеть друг друга?

+0

у вас могут быть все члены класса, которые вы не хотите экспортировать – Viru

ответ

2

Вам не нужно, чтобы объединить их, нужно просто friend assembly:

При разработке библиотеки классов и дополнения к библиотеке содержатся в отдельных сборках, но требуют доступа к членам в существующих сборках которые отмечены как Friend (Visual Basic) или внутренние (C#).
...
Только сборки, которые вы явно указываете в качестве друзей, могут иметь доступ к типам и элементам Friend (Visual Basic) или внутренним (C#).

InternalsVisibleTo атрибут:

[assembly: InternalsVisibleTo("AssemblyB")] 

помогает заблокировать его так только указанный узел может получить доступ к internal пунктов.

(В ответ на ваше редактирование: это указано на уровне сборки, не имеет значения, что такое пространство имен).

+0

Я пробовал это без везения. Я написал пространства имен, имена классов, все для параметра 'AssemblyB', но это не сработает. –

+0

Вам нужно показать нам, что не получилось - без этого мы можем только догадываться, в чем проблема. Вы пытались это сделать, но все же пытаетесь объединить сборки? – slugster

+0

Я написал его под пространством имен, в класс, я переместил его в пространство имен, потом он работал :) Спасибо. –

1

Использование internal

Смотрите пример ниже

public class MyPublicClass 
{ 

    public void DoSomething() 
    { 
     var myInternalClass = new MyInternalClass(); 
     myInternalClass.DoSomething(); 
    } 
} 

internal class MyInternalClass 
{ 

    public void DoSomething() 
    { 
    } 
} 

В вашей DLL, MyPublicClass будет виден внешними пользователи - те, кто ссылается ваш DLL.

MyInternalClass не будет видно.

Смежные вопросы