向后兼容SP26

2020-08-17 07:11发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们使用CRforVS13SP13开发了一个应用程序构建,并将其部署到具有相同版本运行时CRruntime13SP13的客户/客户端。 所以没问题。

现在,一些客户需要升级到更高版本的运行时13SP26,我们不希望他们在其配置文件中重定向SP26的已更改版本编号。 因此,我们决定升级Visual Studio开发环境,并使用更高版本的CRforVS13SP26重建应用程序。 这可以在带有SP26运行时的客户/客户中正常使用。

我们希望它仍然与继续使用旧SP13的客户兼容,但是现在我们看到了错误。 SP26中是否没有向后兼容性,我们现在是否还需要将所有其他客户/客户端也升级到运行时SP26?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们使用CRforVS13SP13开发了一个应用程序构建,并将其部署到具有相同版本运行时CRruntime13SP13的客户/客户端。 所以没问题。

现在,一些客户需要升级到更高版本的运行时13SP26,我们不希望他们在其配置文件中重定向SP26的已更改版本编号。 因此,我们决定升级Visual Studio开发环境,并使用更高版本的CRforVS13SP26重建应用程序。 这可以在带有SP26运行时的客户/客户中正常使用。

我们希望它仍然与继续使用旧SP13的客户兼容,但是现在我们看到了错误。 SP26中是否没有向后兼容性,我们现在是否还需要将所有其他客户/客户端也升级到运行时SP26?

付费偷看设置
发送
8条回答
nice_wp
1楼 · 2020-08-17 07:32.采纳回答

谢谢你,

我按照您的指示尝试对配置文件中的版本号进行重定向,并且它们确实起作用。 我尝试了两种重定向(从13.0.4000.0到13.0.3500.0,也到13.0.2000.0),它们都起作用。

下一个问题是如何在专业的应用程序部署中实现此重定向,因为我不希望我的客户必须编辑他们的配置文件。 我想让客户自由选择运行时版本。
有没有一种方法可以在我的应用程序代码中实现这种重定向。 例如,在程序启动时,我可以查询注册表以找到实际安装的SP编号,然后根据该编号将我的13.0.4000.0重定向到安装的SP。 您能用一个可以实现此目的的VB.Net代码帮助我吗?

关于此,Henk

能不能别闹
2楼-- · 2020-08-17 07:37

SP13已有数年历史,此后SDK中发生了许多更改。 最佳实践是用于开发和运行时的版本应匹配。 因此,是的,在将客户升级到使用SP26编译的新版本的软件时,您确实需要升级运行时。

-Dell

Tong__Ming
3楼-- · 2020-08-17 07:23

请参阅下载的WIKI,您可以使用app.config文件,以便他们可以使用SP26并为2.0框架使用重定向。

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

搜索此KBA-

2719939-Visual Studio Runtime版本控制的Crystal Reports-并排功能-从WIKI下载中使用WinFormCRViewer.zip怎么办

Don

土豆飞人
4楼-- · 2020-08-17 07:30

令人失望的是,Service Pack没有向后兼容性。

如何处理以下客户/客户情况:
-他们目前在SP13运行时中使用我们的应用程序(例如AppA);
-现在他们要从另一个安装另一个应用程序(例如AppB) 要求SP22运行时的供应商;
-这显然与我们的SP13冲突,因此客户要求我们进行升级;
-我们决定将AppA升级到最新版本SP26,也可以为将来的其他需求做好准备 AppA的客户;
-现在由于SP26不向后兼容,我们必须要求客户安装SP26,这反过来又会阻止他们再次使用AppB。

当客户将不同的应用程序与不同的运行时Service Pack一起使用时,这会导致将来的冲突。 并且配置文件中的修复对于单个情况是可以的,但在专业部署中是不可接受的。
我真诚地希望有一个更好的解决方案。

haha101010
5楼-- · 2020-08-17 07:25

嗨,亨克,

具有向后兼容性,这就是KBA的目的。 只需按照KBA中所述将xml文件重命名为您的EXE,然后将其放在EXE文件夹中即可。 您可以将重定向设置为所需的任何旧版本。

您读过KBA吗? 如果您没有使用Google进行搜索,则为以下链接:

https://launchpad.support.sap.com/#/notes/2719939

Don

95年老男孩
6楼-- · 2020-08-17 07:18

据我所知,由于CR for VS只能加载/安装一个版本,因此当您的应用加载时,它将加载app.config文件, 因此,为时已晚。

只有通过加载程序才能检查注册表,写入/更新app.config文件,然后加载主应用程序。

您 可以尝试以下操作:

 foreach(AppDomain.CurrentDomain.GetAssemblies()中的Assembly MyVerison)
 {
     如果(MyVerison.FullName.Substring(0,38)==" CrystalDecisions.CrystalReports.Engine")
     {
        //文件:C:\ Windows \ assembly \ GAC_MSIL \ CrystalDecisions.CrystalReports.Engine \ 13.0.2000.0__692fbea5521e1304 \ CrystalDecisions.CrystalReports.Engine.dll
        //文件:C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ CrystalDecisions.CrystalReports.Engine \ v4.0_13.0.4000.0__692fbea5521e1304 \ CrystalDecisions.CrystalReports.Engine.dll
        //InternalName:Crystal Reports
        //OriginalFilename:
        //FileVersion:13.0.9.1312
        //FileDescription:Crystal Reports
        //产品:SBOP Crystal Reports
        //产品版本:13.0.9.1312
        //调试:False
        //已修补:错误
        //PreRelease:否
        //PrivateBuild:错误
        //SpecialBuild:False
        //语言:英语(美国)

         System.Diagnostics.FileVersionInfo fileVersionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(MyVerison.Location);
         txtRuntimeVersion.Text + = fileVersionInfo.FileVersion.ToString();
        //检查是否可以加载CrsytalDecisions.Enterprise dll(除Cortez之外的所有内容-托管报告)
         如果(fileVersionInfo.FileVersion.Substring(0,2)==" 13")
         {
             btnRasOpen.Enabled = false;
         }
         CRVer = fileVersionInfo.FileVersion.Substring(0,2);
        //返回;

         object []属性;
        //检查调试模式
         尝试
         {
             var assembly = Assembly.LoadFrom(@" C:\ Windows \ assembly \ GAC_MSIL \ CrystalDecisions.CrystalReports.Engine \ 13.0.2000.0__692fbea5521e1304 \ CrystalDecisions.CrystalReports.Engine.dll");
             attribs = assembly.GetCustomAttributes(typeof(DebuggableAttribute),false);
         }
         抓住
         {
             var assembly = Assembly.LoadFrom(@" C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ CrystalDecisions.CrystalReports.Engine \ v4.0_13.0.4000.0__692fbea5521e1304 \ CrystalDecisions.CrystalReports.Engine.dll");
             attribs = assembly.GetCustomAttributes(typeof(DebuggableAttribute),false);
         }


        //如果未找到" DebuggableAttribute",则它肯定是优化的版本
         如果(attribs.Length> 0)
         {
            //仅仅因为找到了'DebuggableAttribute'并不一定意味着
            //这是一个DEBUG构建; 我们必须检查" JIT优化"标志
            //即可以检查"生成PDB",但启用JIT优化
             DebuggableAttribute debuggableAttribute = attribs [0]作为DebuggableAttribute;
             如果(debuggableAttribute!= null)
             {
                 bool HasDebuggableAttribute = true;
                 var IsJITOptimized =!debuggableAttribute.IsJITOptimizerDisabled;
                 var BuildType = debuggableAttribute.IsJITOptimizerDisabled吗?  " Debug":"发布";

                //检查调试输出"完整"还是"仅pdb"
                 var DebugOutput =(debuggableAttribute.DebuggingFlags&
                                 DebuggableAttribute.DebuggingModes.Default)!=
                                 DebuggableAttribute.DebuggingModes.None
                                 ?  " Full":"仅pdb";
             }
         }
         其他
         {
             var IsJITOptimized = true;
             var BuildType ="发布";
         }
     }
 } 

Don

jovirus
7楼-- · 2020-08-17 07:41

嗨,唐,

我对您的代码示例不是很熟悉。
但是我喜欢您的想法,"使用加载程序检查注册表,编写/更新app.config文件,然后加载您的主应用程序"。
我正在考虑在Visual Studio InstallShield中使用InstallScript来检查注册表并在客户端上安装期间更新app.config文件。 这样,我们可以分发通用设置,并让InstallScript根据客户端上的实际运行时版本更改配置。
我将尝试一些操作,并告诉您是否可行。

亲切的问候,亨克

一周热门 更多>