この場合、SVN や GIT などの適切なソース管理を使用してください。どちらも、問題を解決する「外部」を作成する機能を提供します。
ビルド時間が大幅に増加するため、あなたのアイデアは非常に奇妙に思えます。
つまり、プラグインの作成を許可したい場合は、カスタム DLL でプラグイン コントラクト (おそらくインターフェイス) を分離し、この DLL を出荷します。構成可能なアプリケーションを作成するためにソース コードを出荷する必要があるのはなぜですか?
最後に、参考までに、xcopyはファイルを圧縮しません。7zip.exe または同様の圧縮ツールを使用するか、ビルド後のイベントで起動するパラメーター化された PowerShell スクリプトを作成できます。スクリプトには、期待する圧縮を含めることができます。
コンテンツを圧縮できるサンプル関数を次に示します。
function Compress-Directory
{
[CmdLetBinding()]
param(
[Parameter(Mandatory=$true)]
[string]
$SourceDirectory,
[Parameter(Mandatory=$true)]
[string]
$Target,
[ValidateSet("Auto", "Cab", "Zip")] # Supported formats : Cab or Auto for infering the format from the file extension
[string]
$Format = "Auto",
[Switch]$Force
)
process{
if($Format -Match "auto") {
switch([System.IO.Path]::GetExtension($Target).ToLower())
{
".cab" { $Format = "Cab" }
".zip" { $Format = "Zip" }
default { throw "Could not infer the kind of archive from the target file name. Please specify a file name with a known extention, or use the 'Format' parameter to specify it" }
}
}
if(Test-Path($Target))
{
if($Force) {
Write-Verbose "Deleting existing archive $Target"
Remove-Item $Target -Force
Write-Verbose "Deleted existing archive $Target"
}else{
throw "The target file '$Target' already exists. Either delete it or use the -Force switch"
}
}
switch($Format) {
"Cab" {
[void][reflection.assembly]::LoadFile((Join-Path $PSScriptRoot "CabLib.dll"))
## the cablib dll can be downloaded from http://wspbuilder.codeplex.com
$c = new-object CabLib.Compress
$c.CompressFolder($SourceDirectory, $Target, $null, $null, $null, 0)
## thanks to http://www.pseale.com for this function
}
"Zip" {
Get-ChildItem $SourceDirectory | Compress-ToZip $Target
}
default { throw "No compress method known for $Format files."}
}
}
}
function Compress-ToZip {
param([string]$zipfilename)
Write-Host "Creating the archive $zipfilename"
if(-not (test-path($zipfilename))) {
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(Get-ChildItem $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input) {
$zipPackage.CopyHere($file.FullName)
$size = $zipPackage.Items().Item($file.Name).Size
Write-Host "Adding $file"
while($zipPackage.Items().Item($file.Name) -Eq $null)
{
start-sleep -seconds 1
write-host "." -nonewline
}
write-host " Done" -ForegroundColor Green
}
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($zipPackage) | out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($shellApplication)| out-Null
}