我打算写一个小应用程序来刮擦个人痒,可能会让一些同事的生活更轻松。这就是我所拥有的:
申请应该做什么:
除了XML解析部分之外,我在C / Win32中包含COM / Office Automation之前已经完成了所有这些工作。涉及很多样板代码,但它是可行的,结果将是一个非常小的应用程序,而无需安装程序。
那么为什么要考虑C#/ .Net?
到目前为止我的考虑因素:
我的主要目标是功能。努力是一个问题。 XML解析是可选的。
请建议。
更新:我忘了明确提到的一点是,我也担心我的同事可以轻松部署该工具。使用Win32我很确定我可以提出一个EXE文件< 1Mb,可以轻松通过电子邮件发送,不需要安装。与.Net没那么多。我可以在Visual Studio Express (免费)中创建必要的MSI或其他内容,还是需要第三方工具?
答案 0 :(得分:4)
正如其他人主要提到您的问题一样,我想快速评论一下您的注意事项:
- 学习.NET可能很有趣,可能会在更现代化的环境中减少代码/第一步。
完全同意。它绝对有趣,通常它会导致更少的代码。您现在的投资肯定会在未来的项目中受益。在.Net中编程比在C中编程更快。不仅更容易,而且更安全。您与C中常见的许多编程错误隔离,这些错误主要与内存管理不当有关。您还可以获得一个非常完整的托管API来完成构建自己的框架所需的内容。
- 坚持我所知道的将会在努力和功能方面产生可预测的结果(可选的XML内容除外)
因此你的犹豫不决。 : - )
- VB一开始看起来很棒,直到大约80%完成的项目,然后痛苦开始并且用C编写DLL。我担心如果我选择.Net,历史可以重复。我的主要目标是功能。努力是一个问题。 XML解析是可选的。
.Net与VB完全不同。大多数你无法用VB做的事情,或者至少很容易做到的事情都得到了.Net的支持。例如,Windows服务很容易构建.Net。也支持套接字编程,但是你自己做的很少,因为你有大量的.Net通信API。你有网络服务,.Net Remoting,MSMQ管理,以及最近的WCF。与.Net中的愚蠢公寓模型不同,.Net支持适当的多线程。如果你真的需要进入低级别,你也可以在不安全的代码块中使用C#中的指针,即使我从不建议这样做。
如果你真的需要用C做事,那么整合也相对容易。您可以创建COM对象并使用互操作从.Net处理它们。您还可以使用DllImport直接与普通的dll进行交互。使用www.pinvoke.net可以更轻松。
当我在VB中开发时,有时我也不得不回到C ++来做我在VB中无法做到的事情。自从我开始使用.Net编程以来,我需要回到C ++的唯一非常罕见的场景是当我需要使用传统的COM组件时,使用的类型我很难通过互操作进行编组。我不担心历史重演。
答案 1 :(得分:3)
如果你正在使用COM,你可能会对使用C#4.0而不是早期版本感兴趣 - 缺点是它只是在测试阶段。但基本上它会因为各种原因使COM内容变得不那么难看。
我希望现在有很多优秀的C库用于XML解析。我希望 main 的好处实际上是获得的知识。我怀疑你实际上会为这个项目更快地生成代码,但下一个项目可能会更快。
你关心学习新东西多少钱?
答案 2 :(得分:2)
这听起来像是一个学习C#的理想项目。 .NET。
你知道你需要做的大部分事情,所以你可以用它来获得对C#和&然后,您可以将.NET应用于您需要学习的内容。
正如Rune所说,一个关键的驱动因素可能是时间尺度。如果这是你急需的东西,那么在C&直接使用win32可能就是答案。
抱歉,我无法确定。
答案 3 :(得分:1)
这取决于。 :-)这取决于你是想快速完成这项工作还是想要学习新知识。这取决于您是否将成为代码的唯一维护者,或者其他人是否会在将来维护它。这取决于你的xml处理的复杂程度以及COM自动化的复杂程度。
如果你在C语言中使用C#而不是在C#中,你可能会更快地获得一个有效的应用程序。两者都是因为你已经有很多需要的东西,因为你知道C井。
但是这个项目听起来像是C#和.Net的良好匹配。 .Net非常支持XML和COM互操作在C#中很简单但很笨拙(在下一个版本中要好得多!)。因此,如果您有兴趣学习C#和.Net,这将是一个很好的项目。
我肯定会在.Net和C#中做到这一点(但我有偏见)。使用.Net可能会导致代码更易于阅读和维护,并且最容易编写。所以,如果你有兴趣学习C#,我会建议你去学习它!
编辑: 如果你在.Net中编写它,你会担心可执行文件的大小。我怀疑这将是一个问题,因为对于大多数(如果不是所有)您将用于此类项目的库已经安装在您的计算机上。对于大型项目而言,1 .bb对于.Net可执行文件来说相当大。
答案 4 :(得分:1)
我认为你应该使用C#。根据您的经验,学习曲线不会太陡峭。代码最终将比使用C / Win32可能更清晰(并且更少)。 使用[DllImport]属性的现有C库可能没有问题。
答案 5 :(得分:1)
关于安装的简短通知。 .NET是默认的xcopy-able,因此您不需要安装程序来使exe可用。邮寄它(或者使用.NET框架的下一个版本选项将它留在网络共享上)
答案 6 :(得分:1)
您可以考虑构建一个使用C ++ / CLI和C#的混合系统。 C ++ / CLI在两者之间提供了一个很好的桥梁,使您可以轻松地在托管和非托管世界之间拆分系统的不同部分。
不确定安装项目是否包含在Visual Studio的免费版本中。但是你可以使用clickonce(包含在框架中)或WIX(基于开源XML的msi创建工具)。
答案 7 :(得分:1)
学习C#将全部是关于.Net库而不是实际上关于语言
没有很多东西你需要了解语言(委托,事件,泛型...),它也是面向对象的,它自己管理内存,是没有指针:)
无论如何,C#和.NET都很棒你所需要的是努力加快速度