Избавляемся от пространства имен `My` - PullRequest
4 голосов
/ 25 апреля 2011

В последнее время я занимаюсь разработкой приложения Vb.Net и пытаюсь сделать его максимально легким (т.е. сделать бинарные файлы как можно меньше).

Я сделал всетривиальные вещи, но просматривая двоичный файл с ILDasm, я заметил, что у него есть My namespace, с множеством методов, хотя я не использую ни одного из них в моей программе.Кажется, что для каждой формы есть методы по умолчанию Get/Set и другие методы.

Есть ли способ избавиться от них?по умолчанию в двоичном виде?

PS : Я думаю, что это не будет иметь большого значения в размере двоичного файла: я просто спрашиваю это из любопытства;почему компилятор связывает бесполезные методы в каждом двоичном файле?Возможно, я узнаю, что эти методы на самом деле используются где-то под капотом.

PPS : вот минимальный пример:

Module Test
Sub Main()
End Sub
End Module

Вывод: ILDasm output

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

После яростного почесывания головы ...:

Сколько включено, зависит от значения _MYTYPE. Все это задокументировано в MSDN , сначала мне не удалось его найти.

3 голосов
/ 25 апреля 2011

Выполните следующие действия:

  1. Нажмите Show All Files в обозревателе решений
  2. Открыть ветку My Project
  3. Открыть ветку Settings.settings
  4. Открыть Settings.designer.vb
  5. Отредактируйте My пространство имен по вашему желанию

image

Существует дополнительное подпространство имен My с именем My.Resources, которое скрывается под веткой Resources.resx.

1 голос
/ 27 ноября 2013

Чтобы удалить большинство сгенерированных типов в пространстве имен My, вам нужно установить _MYTYPE define в Empty. Для этого вам нужно открыть файл .vbproj в текстовом редакторе (с помощью Visual Studio вы можете сделать это, сначала выгрузив проект, а затем открыв его).

Найдите элемент <MyType> в первом <PropertyGroup> и измените его значение на Empty:

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{C6DC5A64-1E50-48B0-97A5-649D2D323E5E}</ProjectGuid>
    <OutputType>Library</OutputType>
    <RootNamespace>Some.Component</RootNamespace>
    <AssemblyName>Some.Component</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <MyType>Empty</MyType>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <SccProjectName>SAK</SccProjectName>
    <SccLocalPath>SAK</SccLocalPath>
    <SccAuxPath>SAK</SccAuxPath>
    <SccProvider>SAK</SccProvider>
</PropertyGroup>

Я не нашел способа удаления InternalXmlHelper, созданного Visual Studio.

Как указал Clément , можно настроить пространство имен My , используя другие значения определения _MYTYPE.

Эта процедура будет работать для Visual Studio 2012.

...