我继承了一个遗留的.Net 3.5 VB应用程序来支持客户端,他们想要做一些小的数据更改。在我们开始之前,我认为重要的是要注意我运行的是Windows 7 64位和VS 2013 Ultimate R2。
在对项目进行第一次更改时,我注意到他们的数据集使用自定义工具AGDataSetGenerator(由Shawn Wildermuth在2004年编写)。我做了很多关于如何注册自定义工具的问题。我转到http://www.codeproject.com/Articles/8582/Inherit-from-ADO-NET-DataSet-to-create-your-own-bu并获得了该工具的源代码,在项目内部有一些实用程序文件需要运行才能注册该工具。请记住,这是在2004年制作的,所以当时的情况有点不同。
我将Reg.cmd文件修改为指向v2.0.50727,因为我的项目正在运行.Net 3.5和.Net 3.0和3.5都只是.Net 2.0的小更新而不是全新的.net版本。另外我注意到有一个Framework和一个带有C:\ Windows \ Microsoft.Net文件夹的Framework64文件夹,因此我将这两个位置添加到我的.cmd文件中,希望涵盖我的所有基础。代码
Reg.cmd - 原始
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\regasm /codebase /verbose F:\AGDataSetGenerator.dll`
Reg.cmd - 我的修改版
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm /codebase /verbose F:\AGDataSetGenerator.dll
C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\regasm /codebase /verbose F:\AGDataSetGenerator.dll
然后它出现在.reg文件中。
打开文件后,我首先想到的是,很酷,我可以将版本从7.1切换到12.0然后我们就去了。不是这样的。经过相当多的谷歌搜索后,我发现第一行注册了VB.Net的工具,第二个注册表项注册了C#的工具,所以对我来说我只需要第一行,现在也是VS现在注册一个新的位置HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\
用于64位特定寄存器。所以为了再次覆盖我的基地,我尝试包括32位和64位位置。我甚至投入了一个32位和64位的全球注册表,希望将视觉工作室指向发电机入口,不幸的是我有点不在我的驾驶室,所以我几乎抓住了吸管。
BSDataSetGenerators.reg - 原始
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Generators\{164B10B9-B200-11D0-8C61-00A0C91E29D5}\AGDataSetGenerator]
@="ADOGuy DataSet Generator"
"CLSID"="{87BF1B1C-E1DF-4f24-A07E-2BD9B8CAD316}"
"GeneratesDesignTimeSource"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Generators\{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}\AGDataSetGenerator]
@="ADOGuy DataSet Generator"
"CLSID"="{3C13044D-394D-45cd-89FF-51C885BFBCD9}"
"GeneratesDesignTimeSource"=dword:00000001
BSDataSetGenerators.reg - 我的修改版
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\12.0\CLSID\{87BF1B1C-E1DF-4f24-A07E-2BD9B8CAD316}]
@="AGDataSetGenerator"
"InprocServer32"="C:\\WINDOWS\\system32\\mscoree.dll"
"Class"="BottomLine.Generators.VBNETAGDataSetGenerator"
"Assembly"="AGDataSetGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=35e4ca7ea38d2508"
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\12.0\CLSID\{87BF1B1C-E1DF-4f24-A07E-2BD9B8CAD316}]
@="AGDataSetGenerator"
"InprocServer32"="C:\\WINDOWS\\system32\\mscoree.dll"
"Class"="BottomLine.Generators.VBNETAGDataSetGenerator"
"Assembly"="AGDataSetGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=35e4ca7ea38d2508"
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\12.0\Generators\{164B10B9-B200-11D0-8C61-00A0C91E29D5}\AGDataSetGenerator]
@="AGDataSetGenerator"
"CLSID"="{87BF1B1C-E1DF-4f24-A07E-2BD9B8CAD316}"
"GeneratesDesignTimeSource"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\Generators\{164B10B9-B200-11D0-8C61-00A0C91E29D5}\AGDataSetGenerator]
@="AGDataSetGenerator"
"CLSID"="{87BF1B1C-E1DF-4f24-A07E-2BD9B8CAD316}"
"GeneratesDesignTimeSource"=dword:00000001
无论我尝试过什么。当我右键单击数据集并尝试运行自定义工具时。 BAM!我得到以下内容:
如果有人能够在类似的设置下工作,我很想知道你是怎么做的。
答案 0 :(得分:1)
我非常喜欢那种在技术问题上难以接受答案的人。不幸的是,这里的答案只是“不”。自定义工具非常过时,要让它在VS 2013中工作,这是不可行的(我仍然不能说自己不可能)。
我正在写这个答案,因为我有一个解决方法,我建议在相同情况下的任何人直接使用门,而不是试图让旧的工具工作。作为一种解决方法,我在.Net 3.5中创建了一个新的数据项目,并使用实体框架来引入我需要更新的模型。我从数据库生成了我的模型,然后转到.aspx代码后面并替换了对过时生成的数据集的引用。它花了一些重构,但使用EF而不是那些古老的生成数据集将代码减少了大约40%。在我看来赢了。希望这有助于将来的其他人。
答案 1 :(得分:0)
根据旧的.reg对VS 7.1的引用,这意味着它是为在VS 2003中工作而构建的。我知道VS插件编码在VS 2010和更高版本中发生了很大变化。所以,这个插件可能只适用于VS 2003 ...可能一直到VS 2008.但是,它可能需要重新编写才能在以后的任何工作中使用。
希望你有MSDN或知道有人做过。我会启动一个虚拟机,安装VS 2003(或者你可以试用VS 2008),并使用原始的.reg / .cmd安装这个插件。