Visual Studio扩展开发资源汇总

官方开发文档:

中文版:https://msdn.microsoft.com/zh-cn/library/bb166441.aspx

英文版:https://msdn.microsoft.com/en-us/library/bb166441.aspx

含发布流程集合版【此版应该是微软后期调整的重点】:https://www.visualstudio.com/en-us/docs/integrate/ide/extensions/overview

单独附上HelloWorld【代码起于HelloWorld】:https://www.visualstudio.com/zh-cn/docs/integrate/ide/extensions/hello_world

 

代码示例:

微软官方示例:https://github.com/Microsoft/VSSDK-Extensibility-Samples

偶的示例:http://git.oschina.net/huaxia283611/VSExtension-StudySamples


关于在阿里云弹性web上wordpress密码重置问题

旧地址:http://blog.canself.com/resetwordpresspassword/

来源:前阵子合并之前的两个wordpress网站,想用两个用户区分下,建了新用户无法修改密码,只能生成,就想着利用密码重置来更新密码。

问题1:由于博客托管在阿里云弹性web上,在重置密码时,始终提示错误【具体是啥忘了】,就是发不出密码重置邮件。

解决方案:方法涉及修改wordpress代码,升级后需重新修改。

1、打开/wp-includes/class-smtp.php,查找到如下代码【我的wordpress版本在276-283行,其他版本也就在附近】

1
2
3
4
5
6
7
8
$this->smtp_conn = @stream_socket_client(
$host . ":" . $port,
$errno,
$errstr,
$timeout,
STREAM_CLIENT_CONNECT,
$socket_context
);

2、将其修改为如下代码:

1
$this->smtp_conn = @fsockopen($host,$port,$errno,$errstr,$timeout);

3、安装WP SMTP插件,配置发件人信息【之前还看到直接在步骤2的基础上改代码的-没生效】——此插件很久没有更新了,有类似的都可以试试。


问题2:解决问题1后,遇上另一个问题,每次重置密码的链接打开后,都会提示无效;

原因:每次密码重置的链接首尾都带有<>。

解决方案:修改wordpress根目录wp-login.php文件

1、打开wp-login.php文件,查找如下代码,在340行左右【不同版本有所差别,上下找下】

1
$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";

2、去掉首尾<>,代码如下:

1
$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');

完成上面的部分后,终于可以正确的重设密码了。

参考链接:

ReportViewer分页表头不显示问题

软件环境:

VS2015、ReportViewer12.0.0.0-应该sql server 2014

问题:RDLC中表添加分组,添加分页后,后面几页不显示表头。

解决方案:使用分组的高级模式

步骤1、在报表设计器下方的分组框中打开高级模式,如图:

打开高级模式

 

步骤2、选中行组里的第一行(静态)——可以看到报表设计器中表格自动选择了列标题。

选择行组首项

 

步骤3、打开属性对话框,设置KeepWithGroup为after、RepeateOnNewPage为true即可,见下图:

修改行组属性

关于发布版软件无法加载ReportViewer问题

场景:做RDLC报表开发,开发机可以使用,用户机子上却无法打开

原因:由于做开发的,个人机子上环境比较完整,在做RDLC报表开发时,visual studio 在处理部分dll时,并未将dll复制到本地,即客户机缺少dll,故我们需要手动将其改为复制到本地。

解决方案:

状况1、ReportViewer控件直接无法创建初始化,缺少Microsoft.ReportViewer.Common程序集dll,一般情况,在处理rdlc时,此程序集已经自动引用,只需修改属性“复制到本地”为true;若没有找到,可自行引用,路径如下:

C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\12.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.Common.dll

其中12.0.0.0__89845dcd8080cc91为版本,尽量和Microsoft.ReportViewer.WinForms版本保持一致。

 

状况2、ReportViewer能够加载,内部rdlc加载错误,提示缺少Microsoft.ReportViewer.ProcessingObjectModel的引用,处理方法同上,dll路径如下:

C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.ProcessingObjectModel\12.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.ProcessingObjectModel.DLL

EF中无法使用时间转字符串

旧地址:https://www.shisujie.com/efdatetostringerror

场景:

查询条件需要使用到时间类型,且需要特殊格式化,例:ToString("yyyy-MM-dd");即,在需要使用时间进行like方式处理时;

此时,用如下方式:

var q = from c in context.HasDateModels where c.UserDate.ToString("yyyy-MM-dd").Contains("20") select c; 

进行查询使用;

提示:LINQ to Entities 不识别方法"System.String ToString(System.String)",因此该方法无法转换为存储表达式

即:Linq to Entities不支持带参数的时间字符串转换

 

解决方法:

以下方法只适用于数据量较小的情况,同时建议,使用此法,若有其他条件,建议先进行一次Linq to Entities筛选后再处理以下情况;

var q = from c in context.HasDateModels.AsEnumerable() where c.UserDate.ToString("yyyy-MM-dd").Contains("20") select c; 

原理:利用AsEnumerable将使用方式转化为Linq to Object,即将数据查询至内存后再进行筛选