Mar*_*las 6 .net c# visual-studio
作为序言,我已经使用C#几个月,但我完全不熟悉部署和汇编等概念.我的问题很多而且多种多样,虽然我疯狂地谷歌搜索并阅读它们但无济于事(我目前在我面前有Pro C#2008和.NET 3.5平台).
我们有这个过程,它由三个组件组成:引擎,过滤器和过程逻辑.我们非常喜欢这个过程,我们希望它能在其他项目中重复使用.所以现在我开始探索超越一个解决方案,一个项目的空间.
这听起来不错吗?一个巨大的解决方
引擎是所有进程的共享代码,所以我假设它可以是一个共享程序集?如果共享程序集与使用它的项目在同一解决方案中,如果它应该在GAC中,它将如何被消耗?我已经阅读了一些关于post build事件的内容.这是否意味着必须在每次构建时重新部署engine.dll?
此外,我们将过滤器与进程分离的原因(只有一个进程使用它)是因为我们可以独立于进程部署过滤器,以便不需要更新进程可执行文件.不管这是不是最好的做法,让我们来看看吧.这可能吗?我已经读过程序集链接到其他程序集的特定版本,所以如果我只更新DLL,它实际上被认为是篡改.如何在不更改EXE的情况下更新DLL?这是出版商政策的用途吗?
顺便说一句,谷歌能够或亚马逊能够拥有这些东西吗?我应该寻找什么?我看到很多关于C#和.NET的书籍,但没有关于部署,构建或测试或与语言本身无关的事情.
我同意Aequitarum的分析。补充几点:
引擎是所有进程的共享代码,所以我假设它可以是共享程序集?
这似乎很合理。
如果共享程序集与使用它的项目位于同一解决方案中,那么如果它应该位于 GAC 中,那么它如何被使用?
魔法。
好吧,这不是魔法。假设在您的解决方案中,您的流程项目引用了引擎项目。当您构建解决方案时,您将生成一个项目程序集,其中包含对引擎程序集的引用。然后,Visual Studio 将各种文件复制到正确的目录。当您执行进程程序集时,运行时加载程序知道在当前目录中查找引擎程序集。如果在那里找不到它,它会在全局程序集缓存中查找。(这是加载策略的高度简化视图;实际策略比这复杂得多。)
GAC 中的内容应该是真正的全球代码;您合理地期望大量不同项目使用的代码。
这是否意味着每次构建时都必须重新部署engine.dll?
我不确定你所说的“重新部署”是什么意思。就像我说的,如果您有项目到项目的引用,构建系统会自动将文件复制到正确的位置。
我们将过滤器与进程分离(只有一个进程使用它)的主要原因是我们可以独立于进程部署过滤器,这样就不需要更新进程可执行文件
我怀疑这是否真的有价值。场景一:没有过滤器组件,所有过滤器代码都在project.exe中。您希望更新过滤器代码;您更新project.exe。场景二:filter.dll、project.exe。您希望更新过滤器代码;您更新filter.dll。方案二比方案一更便宜或更容易吗?在这两种情况下,您都会更新文件;为什么文件名很重要?
然而,对于您的特定场景来说,也许它确实更便宜、更容易。关于程序集,要理解的关键是程序集是可独立版本化和可重新分发的代码的最小单元。如果您有两个东西,并且彼此独立地进行版本控制和发布是有意义的,那么它们应该位于不同的程序集中;如果这样做没有意义,那么它们应该在同一个程序集中。
我读过程序集链接到其他程序集的特定版本,因此如果我仅更新 DLL,实际上会被视为篡改。如何在不更改 EXE 的情况下更新 DLL?这就是发布商政策的目的吗?
可以给程序集一个“强名称”。当您将程序集命名为 Foo.DLL,并编写 Bar.EXE 来表示“Bar.EXE 依赖于 Foo.DLL”时,运行时将加载任何碰巧命名为 Foo.DLL 的内容;文件名不强。如果邪恶的黑客将他们自己的 Foo.DLL 版本获取到客户端计算机上,加载程序就会加载它。强名称让 Bar.EXE 表示“Bar Corporation 编写的 Bar.exe 版本 1.2 依赖于 Foo Corporation 编写的 Foo.DLL 版本 1.4”,并且所有验证都是针对与 Foo Corp 和 Bar Corp 关联的加密强密钥完成的。
因此,是的,程序集可以配置为仅绑定特定公司的特定版本,以防止篡改。要更新程序集以使用较新的版本,您可以做的是创建一个小 XML 文件,告诉加载程序“您知道我怎么说我想要 Foo.DLL v1.4?好吧,实际上,如果 1.5 可用,则可以使用那个也是。”
我应该寻找什么?我看过很多关于 C# 和 .NET 的书籍,但没有一本是关于部署、构建、测试或与语言本身无关的内容的。
我同意,书籍中经常忽视部署。
如果您对托管 Windows 应用程序的部署感兴趣,我将首先搜索“ClickOnce”。
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |