Tôi đang cố gắng chạy một lệnh như một phần của quá trình đóng gói/triển khai của tôi qua MSDeploy. Đặc biệt, tôi đang cố gắng tạo nhật ký sự kiện tùy chỉnh bằng cách chạy installutil đối với một trong các tệp DLL của mình, nhưng tôi gặp sự cố khi chỉ định đường dẫn tương đối tương đối cho DLL từ thư mục triển khai. Để bắt đầu, tôi đã thêm cấu hình bên dưới vào csproj của mình để tạo nhà cung cấp runCommand bên trong tệp kê khai của tôi. Xin lưu ý đường dẫn tuyệt đối cho DLL.MSDeploy runCommand sử dụng đường dẫn tương đối
<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>
Sau khi gọi msbuild, điều này tạo ra tệp kê khai của tôi đúng trong gói package.zip của tôi. Khi tôi chạy MyTestApp.deploy.cmd/Y nó được gọi một cách chính xác msdeploy và triển khai tác phẩm của tôi để inetpub \ wwwroot \ MyTestApp và chạy lệnh của tôi từ manifest dưới đây:
<runCommand path="installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll ... etc
Vấn đề tôi đang gặp là tôi làm không muốn hardcode đường dẫn DLL này vào c: \ inetpub \ etc. Làm cách nào để thực hiện cuộc gọi ở trên bằng cách sử dụng đường dẫn tương đối tương đối từ thư mục triển khai của tôi trong Trang web mặc định? Lý tưởng nhất, tôi muốn MSDeploy để thực hiện đường dẫn này và chuyển nó làm biến cho lệnh runCommand để tìm DLL. Sau đó, tôi có thể viết một cái gì đó như: <path>installutil $DeploymentDir\NewTestApp\bin\BusinessLayer.dll</path>
mà không cần phải lo lắng về việc mã hóa cứng đường dẫn tuyệt đối.
Có cách nào để thực hiện việc này mà không sử dụng đường dẫn tuyệt đối đến DLL của tôi mỗi lần không?
này có vẻ là một đề nghị nào chính thức, quá: http://social.msdn.microsoft.com/Forums/en/msbuild/thread/1044058c-f762-456b-8a68-b0863027ce47 –