我需要能够从Visual Studio进行编程,也可以从没有管理员权限的计算机上的usb密钥进行编程。
为了达到这个目标,我使用了以下教程 VB.Net Programming Using Notepad And Command Prompt (Part I) Tutorial(VB.Net) Creating Windows Form App Using Notepad+CommandPrompt
现在这个功能很好,不仅有一个问题,使用visual studio很难编辑。由于缺少App.config等文件以及" My Project"中的任何内容,Intellisense的工作效果不佳。子目录。
所以我决定尝试从VS2017项目开始,并仅使用vbc.exe和resgen.exe进行编译
到目前为止,这是我的尝试。
首先我创建了一个新项目。 我选择了一个Windows窗体项目,虽然我想要制作的应用程序可能会在" Sub Main"并运行一个" ApplicationContext"类而不是表单。我试过Console Application,但是我发现控制台窗口很烦人。我可以轻松地隐藏控制台窗口但它在启动时仍然会闪烁。 WPF看起来太新了,现在很难使用。 Windows服务可能需要管理员权限才能运行,我不确定空项目到底是什么。
接下来我做了前两个更改 我禁用了应用程序框架。 它对My命名空间有所帮助。由于某些原因,它使得手动编译变得更加困难。我还将目标.net框架更改为版本4。 这个版本是因为我主要找到版本" v4.0.30319"安装.net框架,以便更高版本可能无法正常工作。
现在,我保存所有这些并尝试构建。出现一个空的窗体窗口,这至少在visual studio中起作用。
为了编译我有一个基本的.bat脚本。 我将免费提供的resgen.exe文件复制到"我的项目"文件夹中。
compile.bat的代码
path=%path%;c:\windows\microsoft.net\framework\v4.0.30319
cd "My Project"
resgen /compile Resources.resx,..\bin\debug\Resources.resources
cd ..
VBC /OUT:bin\Debug\app.exe /resource:"bin\debug\*.resources" /imports:System.Data,System.Deployment,System.Drawing,System.Windows.Forms,System.Xml,System.Xml.Linq,System.Data.DataSetExtensions,System.Collections,System.Collections.Generic,System.Data,System.Drawing,System.Diagnostics,System.Windows.Forms,System.Linq,System.Xml.Linq,System.Threading.Tasks /T:exe *.vb "My Project\*.vb"
pause
一些解释,
首先运行此脚本,重新编译资源文件,然后编译可执行文件。
它将包含所有* .vb文件以及资源文件。
到目前为止,以下文件将被忽略
App.config
WindowsApp2.vbproj
My Project\Application.myapp
My Project\Settings.settings
现在很长的导入列表来自vbproj文件。
当您在visual studio中添加更多引用时,它当前不会自动更新。这个bat文件的未来版本将使用vbscript制作,并且应该提取并自动添加导入/引用,但还没有。
现在运行时会发生什么?
它不能用于3个错误,如下所示:
此对象在.vbproj文件中定义如下
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<StartupObject>WindowsApp2.Form1</StartupObject>
</PropertyGroup>
</Project>
vbc.exe尚未考虑此部分,因此它似乎默认使用Sub Main并出现第一个错误。
vbc : error BC30420: 'Sub Main' was not found in 'app'.
第二和第三个错误如下
C:\defaultpath\Visual Studio 2017\Projects\WindowsApp2\WindowsApp2\My
Project\Settings.Designer.vb(67) : error BC30002: Type 'WindowsApp2.My.MySetting
s' is not defined.
Friend ReadOnly Property Settings() As Global.WindowsApp2.My.MySettings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\defaultpath\Visual Studio 2017\Projects\WindowsApp2\WindowsApp2\My
Project\Settings.Designer.vb(69) : error BC30456: 'WindowsApp2' is not a member
of '<Default>'.
Return Global.WindowsApp2.My.MySettings.Default
这是在.vbproj文件中声明的,但当前没有被compile.bat文件考虑
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<RootNamespace>WindowsApp2</RootNamespace>
</PropertyGroup>
</Project>
在文件Visual Basic Compiler Options Listed Alphabetically中 选项/rootnamespace定义为&#34;指定所有类型声明的命名空间。&#34;
所以我将/ rootnamespace:WindowsApp2添加到我的compile.bat文件中,并解决了上面列出的上述两个问题。
最后,修复Sub Main问题,改为使用&#34; WindowsApp2.Form1&#34;在.vbproj文件中定义
/main命令似乎适合这个,所以我将/main:WindowsApp2.Form1添加到命令行。
在最后一分钟后,.resource文件处理的更改是最新的compile.bat
path=%path%;c:\windows\microsoft.net\framework\v4.0.30319
cd "My Project"
resgen Resources.resx
cd ..
VBC /OUT:bin\Debug\app.exe /main:WindowsApp2.Form1 /rootnamespace:WindowsApp2 /resource:"My Project\*.resources" /imports:System.Data,System.Deployment,System.Drawing,System.Windows.Forms,System.Xml,System.Xml.Linq,System.Data.DataSetExtensions,System.Collections,System.Collections.Generic,System.Data,System.Drawing,System.Diagnostics,System.Windows.Forms,System.Linq,System.Xml.Linq,System.Threading.Tasks /T:exe *.vb "My Project\*.vb"
pause
这会编译一个没有错误的可执行文件。
我运行它并且Form1出现,不幸的是控制台窗口也出现了!
所以看起来我仍然有一个控制台应用程序而不是Windows窗体应用程序 这可以通过修改从exe到winexe
定义为/target的/ T参数来解决最终compile.bat
path=%path%;c:\windows\microsoft.net\framework\v4.0.30319
cd "My Project"
resgen Resources.resx
cd ..
VBC /OUT:bin\Debug\app.exe /main:WindowsApp2.Form1 /rootnamespace:WindowsApp2 /resource:"My Project\Resources.resources" /imports:System.Data,System.Deployment,System.Drawing,System.Windows.Forms,System.Xml,System.Xml.Linq,System.Data.DataSetExtensions,System.Collections,System.Collections.Generic,System.Data,System.Drawing,System.Diagnostics,System.Windows.Forms,System.Linq,System.Xml.Linq,System.Threading.Tasks /T:winexe *.vb "My Project\*.vb"
pause
如果有人有任何意见或建议,我很乐意听到。 我开始写这个问题,但我在写这个问题的过程中解决了我的问题。 如果有更简单的方法,请告诉我。 与此同时,我希望这对于与我在同一条道路上的其他人有用。
再见!