互软研发团队

Talk is cheap. Show me the code.

如何解决.NET程序集强签名下版本依赖导致的错误

有两个dll需要在一个项目内使用,但它们分别都使用了Json.NET的不同版本。一个dll依赖版本6.0,另一个dll依赖版本10.0。运行的时候会出现一方依赖的dll版本不存在。这种情况下要解决这个冲突,请参考以下解决方案:

1、使用更高版本的那个

2、在应用程序配置文件,新增<runtime>配置节,并配置依赖程序集版本重定向。以Json.NET为例,参考如下:

<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
culture="neutral"
publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0"
newVersion="10.0.0.0"/>
</dependentAssembly>

以上的方法有一个前提就是这个dll,它的版本之间程序集签名没有发生过修改

使用DebugDiag抓取ASP.NET程序错误并初步分析

https://www.microsoft.com/en-us/download/details.aspx?id=49924Debug Diag可以用来追踪Windows下崩溃、性能和内存泄漏等一些疑难问题的原因。更详细的使用方式可以参考:https://msdn.microsoft.com/en-us/library/ff420662.aspx?f=255&MSPPError=-2147217396

1、安装Debug Diagnostic Tool v2 Update 2,下载地址:

2、运行Debug Diagnostic Tool

3、点击"Add Rule"按钮,在弹出的对话框中选择"Crash"选项。代表我们当应用程序运行奔溃时候想要抓取dump文件

4、目标类型选择"A specific IIS web application pool",代表我们想要指定一个应用程序池

5、选择了对应的应用程序池以后,点击下一步进入高级配置

6、如果知道异常的名称或者包含的关键字,点击"Exceptions"按钮进入异常相关配置

7、点击"Add Exception",根据.NET Framework的版本差异可以选择"CLR 1.0 - 3.5"或者"CLR 4.x"。在Exception Type Equals一栏可以输入异常的类型名称(例如:System.ArgumentException)或者在Exception Message Includes一栏输入包含的错误消息(例如:未将对象引用设置到对象的实例)。"Action Type"选择"Full userdump"。

8、根据向导一步步操作到最后,并激活新增的规则。当出现对应的错误以后DebugDiag就会产生对应的dump文件。我们运行另一个工具DebugDiag Analysis

9、点击"Add Data Files"添加我们需要分析的dump文件,根据实际情况选择要进行的分析内容,然后点击"Start Analysis"进行分析。DebugDiag Analysis会给出比较详细的分析结果提供参考

BUA同步钉钉通讯录解决方案

同步管理.zip (4.8MB)

BPM工作流V2.0_节点过滤器说明

实现流程中,对于下一步节点和节点的操作人员的过滤。

该过滤是用户自定义的。

BPM工作流V2.0_节点过滤器说明.doc (203.5KB)

开发框架配置不同DAO读取不同的数据库链接


引言

很多同事咨询DAO如何使用不是mainDB之外的其它数据库链接,本文通过使用开发框架的数据链接映射功能来实现。

使用数据链接映射

1、在Web.config中configSections结点配置一下配置

  <section name="Beyondbit.Framework.ConnectionStringMappings"
             type="Beyondbit.Framework.DataAccess.ConnectionStringMappingsSectionHandler, Beyondbit.Framework"/>
2、在Beyondbit.Framework.Web节点下增加如下配置:

<Beyondbit.Framework.Web>
    <ConnectionSettingsPolicy>Beyondbit.Framework.DataAccess.ConnectionSettingsMappingPolicy, Beyondbit.Framework</ConnectionSettingsPolicy>
  </Beyondbit.Framework.Web>
3、增加Beyondbit.Framework.ConnectionStringMappings节点,然后根据自己的需求增加不同的子节点

<Beyondbit.Framework.ConnectionStringMappings>
    <!-- 将Demo1.DAO这个所有的DAO类使用mainDB这个数据库 -->
    <assembly connectionName="mainDB"
              mapTo="Demo1.DAO"/>
    <!-- 将Demo2.DAO这个命名空间下所有的DAO类使用mainDB2这个数据库 -->
    <namespace connectionName="mainDB2"
               mapTo="Demo2.DAO"/>
    
<!-- 将Demo3.DAO.TestDAO3这个DAO类使用mainDB3这个数据库 -->
    <class connectionName="mainDB3"
           mapTo="Demo3.DAO.TestDAO3"/>
  </Beyondbit.Framework.ConnectionStringMappings>

以上方案需要开发框架1.0.2.1+版本支持。

关于VS 2015的智能提示不支持MVC 4.0协同办公的应用推荐使用VS 2013开发

由于VS 2015不支持MVC 4.0 的Razor语法,所以协同办公的应用建议大家使用VS 2013来开发,后续如果VS 2015有解决方案可以解决智能提示问题,我们将会更新此文。

临时解决方案

1、在你的View顶部使用

@inherits System.Web.Mvc.WebViewPage<dynamic> 没有Model类型

或者

@inherits System.Web.Mvc.WebViewPage<Beyondbit.GenerateCode.Demo.Entity.Category> 使用Model类型

来替代下面的写法
@model Beyondbit.GenerateCode.Demo.Entity.Category
效果



更多解决方案,期待你的发现...




协同办公应用在IOS平台滚动条无效的问题解决方案

前言

协同办公应用在IOS平台所有的滚动条无效,是由于IOS平台是默认关闭所有div、iframe元素的滚动条,所以在PC端可以滚动的到IPad或IPhone中就无效了,请根据以下规则兼容IOS平台


使用MVC 4的DisplayModeProvider功能适配出PC或移动端

1、在Global.asax文件中,Application_Start方法中,增加以下红线框中的代码:



2、增加移动端Layout文件


请复制附件中_layout.phone.cshtml到你项目中_layout.cshtml同一个文件夹下。请注意_layout可以是任何模板名,对应_layout.phone.cshtml中的_layout改成您的模板名称.

其中主要代码段如下:

做完上述两步后,基本上页面在IOS平台的滚动条就可以使用了。

其它需要手动调整


还有以下特殊情况,需要小调整,下文将不定期更新:
1、页面中包含IFrame元素,需要在它的父元素增加一个.fit-scroll样式.如下:


_Layout.phone.cshtml (1.5KB)

关于360 安全浏览器 4.0版本 ajax POST的时候,无法传递参数

前言

360安全浏览器 4.0版本,是2012年发布的360公司发布的浏览器版本,经测试,此版本在JS中的Ajax有个BUG,在调用POST协议时,无法传递参数,传递的参数会丢失。 6.0以上的版本下来此问题已经修复。

重现

JQuery Ajax 实验 

Code:




利用Fiddler查看请求:


可以看到WebForms没有Body数据。


原生Ajax


Code:



结果和JQuery Ajax一样,没有Body数据。

结论:
jQuery Ajax和原生JS Ajax都是同样的效果,所以不是jQuery Ajax的代码有兼容性问题,测试其它的浏览器都没有上述问题,只有360安全浏览器4.0版本有这个问题,其它360 6.0以下版本是否有这个问题,就没有测试,请大家自行测试,如果有问题,只能通过升级360浏览器修复这个问题。

使用Visual Studio进行远程调试

由于服务器环境限制,进行Live Debugging不可能再安装Visual Studio。在不熟CDB、WinDbg等情况下推荐使用Visual Studio自带的远程调试功能。参考下面步骤:

1、将Visual Studio Remote Debugger Monitor部署到被调试服务器。如何获取Remote Debugger?以Visual Studio 2013为例,目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger,被调试进程64位则复制该目录下的x64目录
2、已管理员身份启动msvsmon.exe,顶部菜单选择Tools -> Options。在弹出窗口的Authentication mode选择No Authentication,并勾选Allow any user to debug

3、启动Visual Studio,并打开要调试的解决方案或对应源代码文件。顶部菜单Debug -> Attach to Process,弹出对话框的Transport选择Remote(no authentication)、Qualifier输入被调试服务器IP或计算机名、选择要调试的进程,最后单击附加


使用PowerShell替代WinDbg在高分辨率笔记本下调试、排错

最近换新的开发笔记本,分辨率较高发现部分应用在High DPI下几乎没法用。比较纠结的就是WinDbg,频繁切换分辨率、显示文字大小影响工作节奏。cmd跑cdb调试效果也非常糟糕,幸好PowerShell在High DPI下效果不错。

1、下载PowerDbg v6
2、解压运行Install_PowerDbg.bat
3、运行Windows PowerShell,设置本地不受限制的执行策略。输入:Set-ExecutionPolicy Unrestricted
4、导入PowerDbg模块,输入:Import-Module PowerDbg
5、环境变量中设置调试器的路径,例如:$env:DebuggingTools="C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86";
6、启动调试会话,并指定dump file路径。例如:New-DbgSession -dump "D:\1.dump"
7、加载调试器扩展,比如调试.NET的sos:Load-DbgExtension C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
8、执行调试器命令,例如:Invoke-DbgCommand kb