2011-04-25 133 views
4

我最近开发Vb.Net应用程序,和我想要使它一样轻巧地(即使二进制文件尽可能小)。摆脱`My`命名空间

我已经完成了所有微不足道的事情,但在使用ILDasm浏览二进制文件时,我注意到它有一个My namespace,有很多方法,但我没有在我的程序中使用任何这些方法。它似乎有默认Get/Set方法每一种形式,和其他方法。

有摆脱那些方式?
或者,你能告诉我一个用例默认二进制捆绑的方法是什么?

PS:我想这不会使二进制大小的巨大差异:我只是问这是出于好奇;为什么编译器会在每个二进制文件中捆绑无用的方法?也许我会知道这些方法实际上是在引擎盖下的某个地方使用的。

PPS:这里有一个小例子:

Module Test 
Sub Main() 
End Sub 
End Module 

输出是: ILDasm output

+1

的'My'命名空间是非常有用的,但是如果你想删除所有的方法,你不能只打“显示所有文件”,浏览周围的'我的'命名空间(可以访问!你只需要找到它)并删除它?除非你确定你不打算使用它,否则删除它是一个坏主意,因为你可以在你的程序中使用'My.Settings'和命名空间的其他部分,并且我可以在我的许多程序中使用它。 – Cyclone 2011-04-25 18:27:29

+0

似乎有一个最小值是由编译器直接添加的。请参阅我的编辑=) – 2011-04-25 20:50:55

+0

编辑说明:编译命令行是'vbc minimal.vb',假设最小代码块保存为'minimal.vb' – 2011-04-25 20:54:25

回答

3

大怒头刮后...:

包含多少依赖于_MYTYPE的价值定义。它在MSDN所有记录,我未能在第一次找到它。

+1

总节省:6kB! =) – 2011-04-25 21:20:49

3

按照下列步骤操作:在解决方案资源管理

  1. 点击Show All Files
  2. 打开My Project分支
  3. 打开Settings.settings分支
  4. 打开Settings.designer.vb
  5. 编辑My命名空间,如你所愿

image

有一个叫附加My子命名空间是隐藏在Resources.resx分支下。

+1

但是,我想指出,删除或编辑“My命名空间并不是一个好主意,正如我在上面的评论中提到的那样,您可能会发现在稍后的项目中需要一些功能。 – Cyclone 2011-04-25 18:42:49

+0

嗯......我已经摆脱了'Settings.settings'和'Resources.resx'; vb编译器仍然捆绑方法:/ – 2011-04-25 20:47:24

+0

@Clément尝试清空命名空间,而不是完全清除它。 – Cyclone 2011-04-25 20:50:53

1

为了移除My命名空间中的大部分生成类型,您必须将_MYTYPE定义为Empty。要做到这一点,你将不得不打开一个文本编辑器.vbproj文件(使用Visual Studio,你可以先卸载项目做到这一点,比打开它)。在第一<PropertyGroup>

查找元素<MyType>和它的值改为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> 

我还没有发现删除由Visual Studio生成的InternalXmlHelper的一种方式。

由于Clément指出有可能configure the My namespace使用其他值的_MYTYPE定义。

此过程将在Visual Studio 2012年工作