2010-01-14 38 views
38

Tôi bắt đầu sử dụng WiX để thực hiện tự động xây dựng để tạo msi của các dự án C# của tôi và gặp lỗi "Biến số tiền xử lý không xác định '$ (var.MyProject.TargetDir)'"WiX undefined preprocessor biến

Tôi đang sử dụng WiX v3.0.5419 mới nhất. Bên wxs tôi nộp Tôi cố gắng để sử dụng các biến trước khi xử lý được liệt kê trên trang web này (http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor-variables.aspx)

<Component Id="MyId" Guid="MyGuid"> 
    <File Id="MyId" Name="MyName" KeyPath="yes" 
     Source="$(var.MyProject.TargetDir)\MyName.dll" /> 
</Component> 

Tôi đã thêm các tài liệu tham khảo cho MyProject đến .wixproj và nếu tôi mở nó lên trong Notepad tôi có thể xem tham chiếu.

<ItemGroup> 
    <ProjectReference Include="..\MyProject.csproj"> 
    <Name>MyProject</Name> 
    <Project>{guid}</Project> 
    <Private>True</Private> 
    </ProjectReference> 
</ItemGroup> 

Đây là tập lệnh xây dựng nant mà tôi sử dụng để tạo msi. Có lẽ đó là vì .wixproj biết về tham chiếu dự án không được sử dụng trong bản dựng?

<exec basedir="${tools.wix}" managed="true" program="candle.exe"> 
    <arg line='-out "${tools.wix.objfile}"' /> 
    <arg value="../MySetup.wxs" /> 
</exec> 

Bất kỳ ai có thể khai sáng cho tôi về điều này không?

Trả lời

40

Như bạn đã nhận xét, kịch bản xây dựng nant của bạn không sử dụng tệp wixproj.

Bạn đang trộn hai cách khác nhau để xây dựng một thiết lập wix đây:

  1. Bạn có thể sử dụng các công cụ candle.exelight.exe dòng lệnh trực tiếp. Điều này bỏ qua tệp .wixproj. Đây là những gì bạn đang làm trong kịch bản xây dựng nant của bạn. Để chuyển các giá trị cho các biến tiền xử lý như $(var.MyProject.TargetDir), hãy sử dụng các tùy chọn như -dMyProject.TargetDir=c:\foo.

  2. Bạn có thể tạo tệp .wixproj với mãnh liệt (phần bổ trợ studio trực quan dành cho wix). Giống như tất cả các tệp dự án studio trực quan, tệp wixproj thực sự là tệp msbuild có thể được xây dựng với msbuild.exe. Các biến như $(var.MyProject.TargetDir) được tự động thiết lập bởi các tác vụ msbuild để xây dựng các thiết lập wix nếu tham chiếu dự án chính xác tồn tại.

Tôi khuyên bạn nên tạo tệp wixproj với <msbuild>nant task. Điều này đảm bảo rằng xây dựng nant của bạn không giống như khi bạn xây dựng các thiết lập bằng tay từ studio trực quan.

+0

Cảm ơn rất nhiều. Tôi chỉ phát hiện ra rằng wixproj là một tập tin msbuild và tôi đã thực sự đã xây dựng nó một cách chính xác thông qua việc xây dựng giải pháp của tôi! – David

+1

Cũng giống như một thủ tục nhanh chóng - Cách chính xác để chỉ định tùy chọn sẽ là -dMyProject.TargetDir. Các var hàng đầu. là sai lầm. http://geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx –

+0

@Sean: cảm ơn sự điều chỉnh. Đã sửa. –