2009-06-29 40 views
20

Tôi đang cố gắng gọi MSBuild từ một dòng lệnh. Mọi thứ đều hoạt động tốt khi tôi đang sử dụng một đường dẫn không có dấu cách, nhưng bây giờ tôi có một đường dẫn có dấu cách và lệnh không thành công.Làm cách nào để có khoảng trống trong MSBuild WebProjectOutputDir?

Command (công trình):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutDir=c:\temp\deploy\funAndGames\Deployment\bin\ 
/p:WebProjectOutputDir=c:\temp\deploy\funAndGames\Deployment\ 
/p:Configuration=Release 

sau đó tôi đã thêm dấu ngoặc kép và thay đổi OutDir để OutPath (không hoạt động):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\" 
/p:WebProjectOutputDir="c:\temp\deploy\funAndGames\Deployment\" 
/p:Configuration=Release 

Những gì tôi đang hướng tới là một cái gì đó như thế này (doesn 't work):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\" 
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\" 
/p:Configuration=Release 

Bất kỳ trợ giúp nào về cú pháp xung quanh OutDir/OutPath và WebProjectOutputDir có dấu cách? Có thể không? Nếu nó không phải là không ai biết lý do là gì (do một số Url không có điều không gian loại?)

Trả lời

20

Chỉ tìm thấy câu trả lời cho câu hỏi cũ này. Để xử lý dấu cách, bạn nên sử dụng ký tự thoát \ trên tất cả các thư mục. Về cơ bản

/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\" 

nên

/p:OutPath="c:\\temp\\deploy\\fun and games\\Deployment\\bin\\" 

và kỳ diệu nó hoạt động!

+0

Tuyệt vời! Hình như MSBuild có một số cách tùy chỉnh sôi nổi để diễn giải dòng lệnh. Cảm ơn bạn đã đăng kết quả của mình. – jpierson

+4

Vì vậy, làm thế nào để bạn làm điều này khi bạn đang sử dụng các macro như $ (ProjectDir)? – Mateo

+2

@Mateo bạn có thể sử dụng như sau: '/ p: ProjectDir = " $ (ProjectDir.Replace ('\', '\\')) "' – Stijn

1
> "C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
> /t:Rebuild 
> "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\" 
---------------------------------------- 
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\" 
---------------------------------------- 

> /p:Configuration=Release 

Hãy thử này.

Cũng thử qua giao diện VSStudio. Sau đó, sao chép cài đặt & thử với MS Build.

+0

không may là không hoạt động – ChrisHDog

4

Msbuild cũng dường như làm việc với các không gian trong OutDir nếu bạn chuyển đổi \ to /, trong khi sử dụng dấu ngoặc kép:

/p:OutDir="c:/temp/deploy/fun and games/out/" 
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/" 
+0

Làm việc với '/ p: AspnetMergePath = "C:/Program Files (x86)/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Công cụ/"' quá, tôi chỉ phát hiện ra. Các dấu gạch chéo ngược không thành công. –

5

Cố gắng thêm " ví dụ:

/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\"" 
+0

Bạn có thể định dạng mã bằng cách sử dụng 'ctrl + k' hoặc nút' {} 'phía trên cửa sổ trình chỉnh sửa. – stema

+0

Giải pháp làm việc duy nhất mà tôi tìm thấy, hoạt động với các macro VS – Illidan

1

Đối với tôi, giải pháp làm việc là:

/p: SQLCMD = "\" C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE \ ""

Nói cách khác: Đưa tất cả chuỗi vào dấu ngoặc kép (dấu ngoặc kép bên ngoài không được chuyển thành giá trị cho MSBuild).

Giá trị bên trong MSBuild cho thuộc tính này là: "C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE" (có dấu ngoặc kép).

1

Nếu bạn có nhiều tham số trong một chuyển đổi, bạn thực sự không thể 'tránh' được sự cố bằng cách sửa đường dẫn. Những gì bạn có thể làm là đặt các thông số của bạn chuyển đổi giữa " some_parameters1 some_parameters2 ".

Cái gì như:

<Exec Command="SomeCommand /useMultipleParameterSwitch=&quot;value1:blabla1 | value2:blabla2&quot;"/> 

Tất nhiên rất nhiều phụ thuộc của cú pháp của công tắc nhưng mà làm việc cho tôi và đội của tôi.

+0

Điều đó phải có trong "Cái gì đó" ở trên. –

0

Để thực hiện việc này khi sử dụng tệp .proj và đường dẫn của bạn được bao gồm trong các thuộc tính như $ (DeployFolder) và $ (NuGetExe), bạn có thể sử dụng "& quot;" như thế này:

<Exec Command="&quot;$(NuGetExe)&quot; pack -OutputDirectory &quot;$(DeployFolder)&quot;" /> 
Các vấn đề liên quan