问题标签 [forward-compatibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
149 浏览

.net - 这种 hack 是 T4 的定义行为吗

我最近开始对一个相当复杂的 T4 类进行单元测试。我已经取得了重大突破,但恐怕观察到的行为可能只是巧合(即,可能会在未来版本的 Visual Studio 中中断)

我基本上有这样的东西:

主模板.tt:

然后在 generator.tt.cs 我有

观察到的行为是,我既可以使用 T4 模板中声明的类等,也可以正常编译代码文件。<#+但是,是否在所有定义的行为中都在and#>标记之前添加了注释?我将来会冒这种破坏的风险吗?

此外,我已经在 MonoDevelop 和 Visual Studio 2012 上对此进行了测试。它似乎对两者都有效。不过,Visual Studio 2008 的兼容性对我来说并不重要。

0 投票
3 回答
1413 浏览

.net - .NET Frameworks 从 3.5 到 2.0 的向前兼容性

我正在寻找有关 .NET 框架特定版本之间前向兼容性的可靠建议。

为清楚起见,假设我们谈论的是仅支持 .NET 2.0 的 SQL Server 2008,并且我们在其中加载了一个带有存储过程的 v3.5 程序集,以及它的所有 v3.5 依赖项。

这些事实如何结合?
“CLR 相同”的事实能否获胜?是否可以说,由于三个固件版本之间的 CLR 版本相同,只要还引入了所有依赖项,就可以安全地将 v3.5 代码引入 v2.0 环境?在哪种情况下,我们可以将“不支持前向兼容性”通知视为在一般情况下正确,但在 v3.5-v2.0 关系的特定情况下不正确?

(我们实际上已经尝试将具有所有依赖项的 v3.5 程序集导入 SQL Server 2008。它有效。但我想知道它是因为它应该有效,还是因为脆弱的魔法。)

0 投票
2 回答
1913 浏览

python - 如何在 Python 3.2 程序中从无异常语法中优雅地包含 Python 3.3?

我正在尝试重新引发异常,以便为用户提供有关实际错误的更好信息。Python 3.3 包括PEP 409。它添加了raise NewException from None抑制原始异常上下文的语法。

但是,我的目标是 Python 3.2。Python 脚本将解析,但在运行时如果遇到from None它将生成的语法 TypeError: exception causes must derive from BaseException。例如:

封装raise e_reraise from None在一个tryjust 中会产生一个更大的异常堆栈跟踪。版本检查也不起作用,因为我python3.3在 Xubuntu 12.10 上提取/usr/lib/python3/dist-packages/*了为 python3.2 模块设置的模块。(你会得到一个方便Error in sys.excepthook:,它会产生大量的回溯。)

有没有办法在 Python 3.3 中运行时使用 PEP 409 功能,而在 Python 3.2 中默默地忽略它?

0 投票
2 回答
1949 浏览

c# - 具有向前和向后兼容性的插件架构

我目前正在开发将使用插件类型系统的 C# 产品。这并不是什么新鲜事,我已经看到很多关于如何使用接口来轻松实现此功能的信息。

我还看到了通过更新接口名称来实现向后兼容性的方法,例如:版本之间的接口更改 - 如何管理?

关于主 exe 和插件之间的版本不匹配,我可以预见到我们的产品有多种情况。

  1. 主程序与插件相同的插件版本
  2. 主程序比插件更新
  3. 主程序早于插件

从我已经能够收集到 1 和 2 工作的信息很好。但我一直无法弄清楚如何正确实现“前向”兼容性(3)。

我们打算只向插件 API 添加方法。

任何想法都会有很大帮助。

0 投票
2 回答
117 浏览

.net - 对同一个类库的多次引用

假设 2 年前,我编写了一个 .NET 类库,比如mylib.dll,它严重依赖于一个外部库,比如foo.dll,它是开源的、MIT 许可的(这是相关的,请继续阅读)。

许多客户使用我的库以及它的依赖程序集。包裹mylib.dllfoo.dll.

日子一天天过去,创建者foo.dll破坏了他们的 API,现在他们部署了一个新版本的库。这个新版本包含了旧版本中包含的大部分类型,但其中一些方法丢失或更改。

问题

一些潜在的消费者已经foo.dll在他们的应用程序中使用它的新版本,供他们自己使用。当我提供它们时mylib.dll,他们不能使用它。他们甚至无法成功构建,因为mylib.dll想要旧版本的foo.dll旧方法和签名。

如何克服这个问题?

我想要一个前向兼容的解决方案,这样就不会再次提出这个问题。所以我想了几件事:

  1. 更新我的源代码以使用新版本的foo.dll. 但这需要大量的工作和时间。此外,这不是向前兼容的,因为有一天这个问题可能会再次出现。
  2. 由于我有确切版本的来源foo.dll,也许我可以轻松更改其名称空间并重建整个事物。这样我就可以享受我自己的版本了foo.dll,这是合法的,因为它的许可证是 MIT。我可以命名修改后的程序集mylib.foo.dll或类似的名称。我什至可以将整个东西合并ILMerge到类似mylib.merged.dll.
  3. 重新设计mylib.dll,以便将所需的功能foo.dll分离为接口和实现。在工程方面,这是最优雅的解决方案。就时间而言,这是一场灾难,因此不能被视为真正的解决方案。

我的问题

为了完成上面的#2,有没有一种改变给定源代码命名空间的捷径?

0 投票
0 回答
187 浏览

asp.net - 从 ASP.Net 2.0 网站引用 3.5 和 4.0 程序集

我正在对旧的 ASP.Net 2.0 网站(不是 Web 应用程序——不确定这是否重要)进行小幅改进。我引用了一组针对 3.5 和 4.0 的程序集。

我惊讶地发现一切似乎都正常。我可以成功调用程序集中的方法,一切都很好。

我担心的是在未来或部署之后会出现一些运行时问题。只要目标 .net 框架版本部署在服务器上,我就可以了吗?我也很好奇,如果我调用了一个内部使用了 .Net 4.0 中在 2.0 中不存在的东西(例如 Linq)的方法会发生什么。

我无法将网站升级到 .net 4.0,因为这需要对整个应用程序进行回归测试(根据公司政策和常识)。也就是说,我确实可以选择在 .Net 2.0 项目中重新实现我需要的功能。

那么——引用使用较新的 .Net 版本构建的库是否存在高风险,或者如果它在我的本地机器上工作,我是否已经走出困境?

0 投票
0 回答
30 浏览

versioning - 将版本信息添加到现有的未版本化文件

我知道我以前看过这个问题并详细回答过,但我一生都找不到它,所以我会再问一次。

我继承了一些遗留代码,并且与遗留代码的情况一样,编写它时并没有考虑到前向兼容性。该应用程序使用数据文件来存储收集到的数据,并在这些数据上执行计算。我想向这个数据文件添加一个版本控制系统,以便将来应用程序可以简单地检查版本信息并适当地处理文件。

在向数据文件添加前向兼容性功能的同时保持向后兼容性的最佳实践是什么?

0 投票
1 回答
578 浏览

javascript - 不支持 E4x 后转换油脂猴脚本

如何转换这个使用过时 E4X 的脚本?

Flickr 功能套件

我不是程序员,但如果你向我解释我需要从哪里开始,我会尽力而为。

首先,这似乎不是 CDATA 的问题......

这是 Buggzilla 中的一个链接,我在其中描述了我的问题: Firefox 17 破坏了依赖 E4X 的 Greasemonkey 脚本(新:Firefox 21 完全删除了它的支持)

我在这里获得了使用 E4x 的第一个索引(在代码“ricCB”中搜索):

最初发布在这里: 我的 Greasemonkey 脚本在更新后停止工作

0 投票
16 回答
231072 浏览

internet-explorer - 如何检测IE11?

当我想检测 IE 时,我使用以下代码:

但是 IE11 正在返回“您没有使用 Internet Explorer”。我怎样才能检测到它?

0 投票
1 回答
618 浏览

debugging - Internet Explorer 11 有空记录集

我有一个使用 XML 数据绑定的经典 asp 应用程序。使用 IE9 仿真设置,它可以在 IE10 版本中正常工作。但在 IE11 中,记录集始终为空。但是,这些值使用#DATASRC 和DATAFLD 正确绑定到输入字段。只是当我尝试通过 recordset.absolutePosition 访问特定记录时,它会爆炸。由于数据绑定似乎正在运行,因此肯定有一种方法可以指定数据的特定行。