Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
snippet of MSBuild for publish COM objects to a remote server using psexec
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Env)' == 'test'">
<!-- UNC path where we publish code-->
<PublishFolder>\\dev-server\Sites\my-classic-asp-site</PublishFolder>
<!-- the remote path to where our code is deployed -->
<LocalPublishFolder>D:\WebRoot\my-classic-asp-site</LocalPublishFolder>
<!-- the computer name for psexec -->
<Computer>\\dev-server</Computer>
</PropertyGroup>
<PropertyGroup Condition="'$(Env)' == 'prod'">
<PublishFolder>\\prod-server\WebRoot\my-classic-asp-site</PublishFolder>
<LocalPublishFolder>D:\sites\my-classic-asp-site</LocalPublishFolder>
<Computer>\\prod-server</Computer>
</PropertyGroup>
<PropertyGroup>
<!-- where to copy our COM assembly -->
<COMPublishFolder>$(PublishFolder)\COM</COMPublishFolder>
<!-- remote path to our where we published our COM assembly -->
<COMFolder>$(LocalPublishFolder)\COM</COMFolder>
<!-- remote path to our COM assembly -->
<COMAssembly>$(COMFolder)\My.Interop.dll</COMAssembly>
<!-- remote path to our typelib -->
<COMTypeLib>$(COMFolder)\My.Interop.tlb</COMTypeLib>
<!-- local path to psexec-->
<PsExec>$(MSBuildProjectDirectory)\tools\PsExec.exe</PsExec>
<!-- remote path to regasm.exe -->
<RegAsm>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe</RegAsm>
<!-- remote path to iisreset.exe -->
<iisreset>c:\WINDOWS\system32\iisreset.exe</iisreset>
</PropertyGroup>
<Target Name="DeployCOM">
<!-- local path our compiled, strongly-named COM assembly and it's dependencies -->
<ItemGroup>
<FilesToCopy Include="$(MSBuildProjectDirectory)\src\My.Interop\bin\Release\*.*"/>
</ItemGroup>
<MakeDir Directories="$(COMPublishFolder)"/>
<!-- unregister the old version of the DDL -->
<Exec Command="$(PsExecBinary) $(Computer) $(RegAsm) /u /codebase /tlb:$(COMTypeLib) $(COMAssembly)"
IgnoreExitCode="true"/>
<!-- restart IIS -->
<Exec Command="$(PsExecBinary) $(Computer) $(iisreset) /restart" IgnoreExitCode="true"/>
<!-- copy new DLL to the server -->
<Copy SourceFiles="@(FilesToCopy)"
DestinationFiles="@(FilesToCopy->'$(COMPublishFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true"
/>
<!-- register the new DDL -->
<Exec Command="$(PsExecBinary) $(Computer) $(RegAsm) /codebase /tlb:$(COMTypeLib) $(COMAssembly)"/>
</Target>
</Project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment