出于某种原因,我们有一个脚本可以为我们的beta测试人员创建批处理文件到XCOPY我们编译的程序集,配置文件和各种其他文件到网络共享.我们有安装程序,但有些没有运行安装程序所需的权限,或者它们在Citrix上运行.
如果您在XCOPY和Citrix的提及下呕吐在您的办公桌上,请以此为借口早日回家.别客气.
该代码目前有数百行,如:
CreateScripts(basePath, "Client", outputDir, FileType.EXE | FileType.DLL | FileType.XML | FileType.CONFIG);
过去更糟糕的是,有20个int参数(每个文件类型一个)表示是否将该文件类型复制到输出目录.
这几百行创建了包含数千条XCOPY行的上载/下载批处理文件.在我们的安装项目中,我们可以引用诸如“来自客户端的主输出”和“来自客户端的内容文件”之类的内容.我希望能够通过非安装项目以编程方式进行,但我很茫然.
很明显,MS使用API或解析.csproj文件.我该怎么做呢?我只是想找到一种方法来获取任何设置类别的文件列表,即:
>主要输出
>本地化资源
>内容文件
>文档文件
编辑:
我有一个像Hath建议的设置项目,它正在我正在寻找的一半.唯一的问题是,保持这是一个完美的解决方案是多个项目依赖于在他们自己的文件夹中的相同程序集,并且安装程序将只复制文件一次.
例:
Projects Admin,Client和Server都依赖于ExceptionHandler.dll,而Admin和Client都依赖于Util.dll,而Server则不依赖于.这就是我要找的东西:
>管理员
> Admin.exe
> Admin.exe.config
> ExceptionHandler.dll
> Util.dll
>客户
> Client.exe
> Client.exe.config
> ExceptionHandler.dll
> Util.dll
>服务器
> Server.exe
> Server.exe.config
> ExceptionHandler.dll
由于引用的程序集都是相同的,我得到的是:
>管理员
> Admin.exe
> Admin.exe.config
> ExceptionHandler.dll
> Util.dll
>客户
> Client.exe
> Client.exe.config
>服务器
> Server.exe
> Server.exe.config
当客户端或服务器无法找到它期望的两个DLL之一时,这会导致FileNotFoundException.
是否有一个我缺少的设置属性,使它始终复制输出,即使它在另一个项目的输出中的其他地方重复了?
再次编辑:所有引用的DLL都设置为“复制本地”,并且一直都是.我在using NAnt and XSLT to grab the list of files找到了一篇不错的文章,所以这可能是一个可能的解决方案,正如neouser99所建议的那样.
接受的解决方案:我几乎回到了我开始的地方.所有.exe和.dll输出都放在安装项目的“bin”目录中,松散地打包.其他每个应用程序文件夹包含该目录中可执行文件的快捷方式.
现在的区别是,我将向安装程序添加一个自定义操作以使用反射,枚举每个可执行输出的依赖项,并将.exe和.dll文件复制到单独的目录中.有点痛苦,因为我只是假设有一种方法可以通过编程方式检测通过某些安装库包含哪些文件.
解决方法:
为什么不使用另一个安装项目,只需将’包文件’设置为As Loose未压缩文件(setup project-> properties)?然后分享文件夹..或者其他东西.
编辑:
我知道,你的输出有3个文件夹.但是安装项目只检测ExceptionHandler.dll和Util.dll一次,因此它只会选择第一个文件夹并将其放入其中.
你可以为每个项目做一个设置项目 – 有点烦人也许..
您可以手动将dll添加到缺少程序集的项目中
如果你在同一个解决方案中有这些项目,可以通过’添加文件’或’添加程序集’或’添加项目输出’添加文件.(我怀疑是这种情况).
或者只是将它们全部转储到一个输出目录中……