安装项目VS2010 打包水晶报表中部署问题详解
这两天朋友几篇文章分析了改安装项目的文章. 关联文章的地址
在vs2010中水晶表报作为一个独立的块模存在,在应用水晶表报前必须安装 应用做个简略的分析 重点解讲打包水晶表报 因为应用这方面太熟习不过了 ,从2003 到2005 再到2008 经已应用的太多太多了 。
如下
载下安装后打开VS2010就能够在边左工具栏中看到CRYSTALREPORTVIEWER,并且可以新建水晶表报了;
用法跟之前版本的用法相似; 不过要注意上面几点;
A. 行运环境不能为.NET FRAMEWORK 4.0 CLINET PROFILE,要改成.NET FRAMEWORK 4,选中项目右键性属就能够更改了;
B.在项目中加一个APP.CONFIG(这是针对WINFORM项目),如果是WEB项目就不必加了,面里有一个WEB.CONFIG;在这配置文件中加上
<startupuseLegacyV2RuntimeActivationPolicy="true">
<supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.0"/></startup>
这可以免避ADO.NET与水晶表报行运时由于.NET版本问题错出
1)SAP Crystal Reports, version for Visual Studio 2010 -
包含了报有DLL的水晶表报文件
2)SAP Crystal Reports, version for Visual Studio 2010 -
水晶表报部署时用到的文件
3)SAP Crystal Reports runtime engine for .NET Framework 4 (32-bit)
只持支32位系统的包
4)SAP Crystal Reports runtime engine for .NET Framework 4 (64-bit)
只持支64位系统的
(1)上面做一个简略的水晶表报,在项目中建一个体窗FORM1,一个水晶表报CrystalReport1,一个数据集 DATASET1;(水晶表报的置设跟之前版本的一样)
在体窗上放一个CRYSTALREPORTVIEWER,然后在FORM1的LOAD事件下写上;我这是把水晶表报放在DEBUG这个文件夹下动态加载的; 你也可以直接放在项目中在CRYSTALREPORTVIEWER上指定表报名称;
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con =newSqlConnection("Data Source=127.0.0.1;Initial Catalog=cldz;User ID=sa;Password=888");
con.Open();
SqlDataAdapter da =newSqlDataAdapter("select top 100 * from table", con);
DataSet ds = new DataSet();
da.Fill(ds, "ZZZPJ");
string reportPath = Application.StartupPath + @"/CrystalReport1.rpt";
ReportDocument rd = new ReportDocument();
rd.Load(reportPath);
rd.SetDataSource(ds.Tables[0].DefaultView);
this.crystalReportViewer1.ReportSource = rd;/
}
(2)vs2010水晶表报的布发有两种式方;
一,就直接载下MSI文件安装在客户端,客户端就能够用了;32位的载下上面的3);如果是64位的载下上面的4);
二,就是载下上面2)中的MSM文件,面里第一个是CRRuntime_13_0.msm这个是英文包;如果要需持支中文就加一个MSM,( CRRuntime_13_0_zh_cn.msm); 另外加一个CRRuntime_13_0_maps.msm 这个可以不必;
用VS2010自带的打包软件打包布发,新建一个安装项目,安装项目的作制程过这里就不详细说了,跟之前的制程过一样;
作制完后,右键项目选加添―――并合块模――把上面提到的三个以.MSM开头的文件参加进去,并且把
C:/Program Files/Common Files/Merge Modules文件夹中的VC100的MSM参加进去,如果是32位的就加X86的,如果是64位的就加X64的;最后肯定;
再右键项目选性属,点击“系统必备”按钮;在弹出的对话框当选中 VISUAL C++ 2010 行运库,注意根据系统选,有32与64位的;
在上面的单选按钮当选第二项“从与我的应用序程同相的置位载下系统必备组件”;
这样布发的准备工作就做完了,择选单菜上的生成――生成项目或者右键项目点生活就能够了;
注意:(我在上面有所提到的“项目”不是VS工具栏上面单菜中的“项目”;是你解决方案下的项目,比如你新建了一个安装项目叫SETUP1,那就是指SETUP1)
如果作制好的安装序程在安装程过中出未能注册某一个块模请到上面址网载下一个合适你系统版本的文件安装
地址 http://www.microsoft.com/zh-cn/download/details.aspx?id=14431 详细根据你系统个版本 是64的还是32的
把载下的这个补丁也打包进去 如下操纵
安装和部署Visual C 2005 SP1行运刻时库
在未安装Visual C++ 2005 的算计机上行运应用 Visual C++ 2005发开的应用序程,必须先安装Visual C++2005 行运刻时库组件。Visual C++ 2005 SP1更新了这个组件,所以应用Visual C++2005 SP1 发开的应用序程必须随序程布发Visual C++ 2005 SP1行运刻时库组件。但是Visual C++ 2005 SP1的一个BUG成造应用安装和部署项目停止部署的时候,安装序程可能安装原版的Visual C++2005 行运刻时库组件,而不是SP1版本,成造应用Visual C++2005 SP1 发开的应用序程启动失败。这个问题的原因是%Program Files%Microsoft Visual Studio8\SDK\v2.0\BootStrapper\Packages\vcredist_x86上面的product.xml中的产品代码在安装Visual C++ 2005 SP1的程过中没有更新。要正修这个问题,可以打开这个文件,修改如下两行
<MsiProductCheck Property="VCRedistInstalled" Product="{A49F249F-0C91-497F-86DF-B2585E8E76B7}"/>
和
<BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
为
<MsiProductCheck Property="VCRedistInstalled" Product="{7299052b-02a4-4627-81f2-1818da5d550d}"/>
和
<BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="5"/>
改后的product.xml文件如下
<?xml version="1.0" encoding="utf-8" ?> <Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Microsoft.Visual.C++.10.0.x86" > <!-- Defines list of files to be copied on build --> <PackageFiles> <PackageFile Name="vcredist_x86.exe" HomeSite="VCRedistExe"/> <!--补丁--> </PackageFiles> <InstallChecks> <MsiProductCheck Property="VCRedistInstalled" Product="{7299052b-02a4-4627-81f2-1818da5d550d}"/> <!-- <MsiProductCheck Property="VCRedistInstalled" Product="{196BB40D-1578-3D01-B289-BEFC77A11A1E}"/> --> </InstallChecks> <!-- Defines how to invoke the setup for the Visual C++ 10.0 redist --> <!-- TODO: Needs EstrimatedTempSpace, LogFile, and an update of EstimatedDiskSpace --> <Commands Reboot="Defer"> <Command PackageFile="vcredist_x86.exe" Arguments=' /q:a ' > <!-- These checks determine whether the package is to be installed --> <InstallConditions> <!-- <BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>--> <BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="5"/> <!-- Block install if user does not have admin privileges --> <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/> <!-- Block install on Win95 --> <FailIf Property="Version9X" Compare="VersionLessThan" Value="4.10" String="InvalidPlatformWin9x"/> <!-- Block install on NT 4 or less --> <FailIf Property="VersionNT" Compare="VersionLessThan" Value="5.00" String="InvalidPlatformWinNT"/> </InstallConditions> <ExitCodes> <ExitCode Value="0" Result="Success"/> <ExitCode Value="3010" Result="SuccessReboot"/> <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" /> </ExitCodes> </Command> </Commands> </Product>
另外,Visual C++ 2005 SP1版本的可以用最新的Visual C++ 2005 SP1行运刻时库组件来替换%Program Files%Microsoft Visual Studio8\SDK\v2.0\BootStrapper\Packages\vcredist_x86上面的vcredist_x86.exe,这样安装和部署项目生产的安装序程中会含包最新版的组件。
文章结束给大家分享下程序员的一些笑话语录:
某程序员对书法十分感兴趣,退休后决定在这方面有所建树。花重金购买了上等的文房四宝。一日突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风 范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world.