ClickOnce-CrystalReport的DLL如何不放到到编译后资源中

CrystalReport有个运行时组件,如果你是ClickOnce的话,客户端运行的时候需要先安装这个运行时组件。

一般做法是做一个setup.exe,然后用户通过主页的安装按钮,来下载并安装这个setup.exe。

setup.exe会打开WindowsInstaller,然后下载并安装这些需要的组件,比如

.NetFramework

.CrystalReport运行时组件 等

 

我今天要说这个编译时,不把CrystalReport的DLL给放到到编译后资源文件里,因为

1,这个会导致编译后资源文件变大

2,本来客户端已经安装了运行时组件了,实际上不需要这些DLL

 

下面来说说这些内容:

1,setup.exe打开的WindowInstaller都会下载并安装的组件,在哪里设置

右键Project,点击 属性,然后点击 发行,然后点击 必须组件 这个按钮(如图1),打开必须组件窗口(如图2)

<图1>

 

<图2> 我这里面需要 .NetFramework4.8和CrystalReport 两个组件。

 

这样,在主页点击按钮,去执行setup.exe的时候,就会先打开WindowsInstaller,下载并安装这两个组件了。

 

2,编译CrystalReport的DLL问题

不想把这个多余的DLL给放到编译后资源里,需要修改DLL的copy local 设置为 False 就可以了。

 当然,需要把所以DLL都设置一遍,不要漏了。

 

 

设置之后呢,在上面图1中 应用程序文件 按钮里面,确认一下是不是 公开状况 变更成了 必须组件(自动) 了。

如此,在编译的话,就不会把DLL给放到编译后资源里面了。

<图3>

 

后记:这个local copy属性是干什么用的呢?

好像是把DLL给拷贝到GAC文件夹里用的。

然后,因为不想把DLL给放到编译后资源里,可以在图1中 应用程序文件 按钮里面,手动把CrystalReport 公开状况 变更成了 必须组件 ,就可以了。

 

但是,local copy为True的话,  ※因为是默认为True,一般也没人改它,所以很可能是True

因为CrystalReport的DLL的特性----即,

64位的运行是组件,实际上内部使用的是32 位DLL

会导致

・64位应用程序,并且安装了64位CrystalReport运行组件,

・点击setup.exe的时候,因为会看GAC里有没有DLL,没有的话需要拷贝过去,于是出现下面图4的错误,让你安装32位的CrystalReport组件。

 

<图4>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值