C# 依赖项:Microsoft Word?

C# 依赖项:Microsoft Word?,c#,.net,web,C#,.net,Web,我已经写了一个小应用程序,我正在分发给我的一些朋友。它与Web页面交互,唯一依赖的是MyStut.MsTML.DLL,与一些Web控件进行交互。 我们注意到一种奇怪的行为,在一些计算机上它工作,而在另一些计算机上它不工作。我告诉他们要确保安装完整的.NET4.0框架,而不是客户端配置文件。它仍然不起作用 我的一个朋友注意到,他的it机器上安装了Microsoft Word,其他人没有。于是他安装了一个试用版,神奇地,我的程序开始工作了 Microsoft Word安装的哪些内容不在.Net Fr

我已经写了一个小应用程序,我正在分发给我的一些朋友。它与Web页面交互,唯一依赖的是MyStut.MsTML.DLL,与一些Web控件进行交互。 我们注意到一种奇怪的行为,在一些计算机上它工作,而在另一些计算机上它不工作。我告诉他们要确保安装完整的.NET4.0框架,而不是客户端配置文件。它仍然不起作用

我的一个朋友注意到,他的it机器上安装了Microsoft Word,其他人没有。于是他安装了一个试用版,神奇地,我的程序开始工作了

Microsoft Word安装的哪些内容不在.Net Framework中?我有没有办法把需要的文件寄给他们

注意:我最初使用的是一个安装程序,它工作得很好,但我不知道如何更新应用程序,所以我们求助于我,只是将应用程序以zip格式发送给他们。所以,请不要回答“制作安装程序项目”。我目前正试图找出如何制作一个更新程序,这不是这里讨论的主题

谢谢


编辑:我没有故意在Word中添加任何依赖性…

嗯,最好避免依赖其他应用程序。因此,尽量避免使用该库提供的方法/数据结构。可能有一个.NET自带的库可以满足您的需要。如果没有,请寻找一些可以轻松地以.dll形式包含在应用程序中的开放源代码库(在许多情况下,您甚至可以告诉它将自身附加到应用程序)。如果您正在进行一些html解析,我完全推荐使用HTMLAgilityPack()。

来回答您提出的问题: 很多是用Word安装的,而不是用.NET Framework安装的。Word是一个非常复杂的应用程序

从理论上讲,是的,您可以向他们发送所需的文件。 实际上,您需要手动重新创建半个字的安装,并侵犯版权。请不要


我同意Paul_R的观点:如果您的“客户”不是Word用户,请尽量避免这种依赖关系。

如果您使用的是Microsoft.mshtml.dll之类的库,它们不是.Net framework的一部分,而是本机.Net的一部分,那么这些库很可能缺少目标计算机。例如,Microsoft.mshtml.dll随您的Visual studio工具提供office支持等。因此,如果目标计算机上未安装office/Visual studio,则应用程序将无法运行

作为替代解决方案,请识别它们并保留这些依赖dll的本地副本,然后将它们发送到您的包中。但这不是一种最佳做法

但保罗说得对。确定您的客户机基础架构,在发布之前计划并测试一次(在目标环境上)。请记住,您有一台开发人员机器,但其他人没有

Microsoft Word安装的哪些内容不在.Net中 框架

Microsoft Word应用程序本身及其所有支持文件

我有没有办法把需要的文件寄给他们

对。但是,在进行之前,有一些事情需要考虑。p>
  • 重新分发您依赖的某些内容可能是非法的。在这里要小心,在继续之前要做研究
  • 如果依赖于具有所需依赖项的系统,则依赖项不存在或依赖项的其他版本存在问题
最安全的办法是找到一种重量轻、可自由再发行、具有您所需功能的产品,而不是Microsoft Word

或者,您可以让应用程序禁用使用可能不存在的依赖项的功能


编辑:如果要部署依赖项,只需识别它们并确保它们已打包即可。像.NET Reflector这样的工具非常适合识别所有下游依赖项。

您依赖mshtml的目的是什么?它有什么作用?当你说与网页交互时,你的意思是屏幕会刮去其他网页吗?操纵其他页面?我不相信Microsoft.mshtml.dll是.net框架的一部分,可能是由office安装的。您可能必须确保将此dll复制到您的输出目录并随应用一起提供(但不确定许可要求)。您是否分发了应用生成时附带的所有dll?Visual Studio应该已将所有必需的DLL移动到项目的bin\Release目录中。可能缺少的依赖项的“Copy Local”属性设置为false,因此它永远不会被复制到输出目录…?下面是一个示例:ClickLink(HtmleElement linkToClick){HTMLAnchorElementClass linkElement=(HTMLAnchorElementClass)linkToClick.DoElement;linkElement.click();}HtmlanchoreElementClass位于mshtml中。是否将Microsoft.mshtml.dll与应用程序一起分发到应用程序bin文件夹中?您提到,当您制作一个安装程序时,请查看旧安装程序的依赖项,以确定可能缺少的内容。