Estoy tratando de ejecutar un comando como parte de mi proceso de empaquetado/implementación a través de MSDeploy. En particular, estoy tratando de crear un registro de eventos personalizado ejecutando installutil contra uno de mis archivos DLL, pero estoy teniendo problemas para especificar una ruta relativa a la DLL desde el directorio de implementación. Para comenzar, agregué la siguiente configuración a mi csproj para generar el proveedor de runCommand dentro de mi archivo Manifest. Tenga en cuenta la ruta absoluta a la DLL.MSDeploy runCommand utilizando la ruta relativa
<PropertyGroup>
<!-- Extends the AfterAddIisSettingAndFileContentsToSourceManifest action to create Custom Event Log -->
<IncludeEventLogCreation>TRUE</IncludeEventLogCreation>
<AfterAddIisSettingAndFileContentsToSourceManifest Condition="'$(AfterAddIisSettingAndFileContentsToSourceManifest)'==''">
$(AfterAddIisSettingAndFileContentsToSourceManifest);
CreateEventLog;
</AfterAddIisSettingAndFileContentsToSourceManifest>
</PropertyGroup>
<Target Name="CreateEventLog" Condition="'$(IncludeEventLogCreation)'=='TRUE'">
<Message Text="Creating Event Log" />
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<path>installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll</path>
</MsDeploySourceManifest>
</ItemGroup>
</Target>
<ItemGroup>
Después de llamar a msbuild, esto generó mi manifiesto correctamente dentro de mi package.zip. Cuando me encontré con MyTestApp.deploy.cmd/Y correctamente llamado MSDeploy y desplegado mis archivos a inetpub \ wwwroot \ MyTestApp y pasé comando desde el manifiesto a continuación:
<runCommand path="installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll ... etc
El problema que estoy teniendo es que hago No quiero codificar esta ruta DLL a c: \ inetpub \ etc. ¿Cómo puedo hacer la llamada anterior utilizando la ruta relativa relativa desde mi directorio de implementación en el Sitio web predeterminado? Idealmente, me gustaría MSDeploy para tomar esta ruta y pasarla como una variable a la instrucción runCommand para encontrar la DLL. Entonces podría escribir algo como: <path>installutil $DeploymentDir\NewTestApp\bin\BusinessLayer.dll</path>
sin tener que preocuparme por codificar una ruta de acceso absoluta en.
¿Hay alguna manera de hacer esto sin usar la ruta absoluta a mi DLL cada vez?
Esto parece ser una recomendación un tanto oficial, también: http://social.msdn.microsoft.com/Forums/en/msbuild/thread/1044058c-f762-456b-8a68-b0863027ce47 –