2012-07-09 61 views
9

Tôi đang sử dụng Visual Studio 2012 RC để làm việc với giải pháp C# của mình. Tất cả các cấu hình cụ thể của tôi cài đặt được lưu trữ trong một tập tin .props duy nhất mà sau đó được bao gồm bởi tất cả các tập tin .csproj của tôi.Visual Studio tiếp tục thêm thuộc tính vào csproj của tôi. Tại sao?

Tuy VS khăng khăng đặt quyền này ở phía trước của bao gồm:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> 
    <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Debug\</IntermediateOutputPath> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> 
    <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Release\</IntermediateOutputPath> 
</PropertyGroup> 

<Import Project="$(MSBuildProjectDirectory)\..\Common.props" /> 

Tại sao vậy?

FYI, tập tin phổ biến của tôi trông như thế này: http://pastebin.com/Uued1XY0

+1

Câu trả lời đơn giản là Microsoft không bao giờ coi bạn sẽ thực hiện tùy chỉnh tệp csproj như vậy. Đôi khi bạn có thể tùy chỉnh các tệp dự án một chút (bằng may mắn), nhưng hầu hết các lần bạn chỉ gặp rắc rối với bản thân. –

Trả lời

0

Vì vậy, bạn có thể ghi đè lên các thiết lập đó, nếu cần thiết. Nếu quá trình nhập của bạn đến trước, các thuộc tính của Visual Studio sẽ được ưu tiên. Trong MSBuild, định nghĩa cuối cùng sẽ thắng và được sử dụng. Đây là một điều tốt. Nó có gây ra lỗi không? Hay bạn không thích nó?

+0

Tôi không thích nó, bởi vì các đường dẫn tạm thời này thay đổi mỗi khi tôi tải lại dự án. Rất khó chịu vì việc kiểm soát phiên bản luôn có những thay đổi đối với tất cả các dự án. –

0

Bạn đã chỉ định trong dự án của mình. Tệp thuộc tính sẽ có BaseIntermediateOutputPath. Nếu bạn không chỉ định bất kỳ giá trị nào trong nó sẽ được lấy từ Base của bạn.

Đường dẫn đầu ra trung gian đầy đủ có nguồn gốc từ BaseIntermediateOutputPath, nếu không có đường dẫn nào được chỉ định. Ví dụ, \ obj \ debug. Nếu thuộc tính này bị ghi đè, thì việc thiết lập BaseIntermediateOutputPath không có hiệu lực.

Tham khảo: http://msdn.microsoft.com/en-us/library/bb629394.aspx

5

Những nhân IntermediateOutputPath có thể được chèn khi MSBuild được đưa ra một con đường xấu.

Trong trường hợp của chúng tôi, chúng tôi đã có thêm dấu gạch chéo không cần thiết sau khi SolutionDir cho thư mục đầu ra.

gì đã không được làm việc cho chúng tôi (chú ý dấu gạch chéo thêm):

<OutputPath>$(SolutionDir)\out\bin\</OutputPath> 
<IntermediateOutputPath>$(SolutionDir)\out\obj\</IntermediateOutputPath> 

gì đã làm công việc:

<OutputPath>$(SolutionDir)out\bin</OutputPath> 
<IntermediateOutputPath>$(SolutionDir)out\obj</IntermediateOutputPath> 

Để giúp khắc phục sự cố trường hợp cụ thể của bạn, hãy thử bật ra MSBuild chẩn đoán và đăng nhập vào Tools-> Options-> Projects và Solutions-> Build and Run-> MSBuild xây dựng dự án verbosity đầu ra. Sau đó, tìm kiếm thư mục đã tạo (ví dụ: "Nhiệt độ").

Sử dụng tệp proj/props/targets phổ biến là một ý tưởng tuyệt vời, nhưng nó đòi hỏi phải chiến đấu với Visual Studio một chút.

+0

Các bước khắc phục sự cố không hoạt động đối với tôi (Visual Studio 2013). Các tệp dự án được sửa đổi bởi VS trong khi tải thay vì khi xây dựng, vì vậy đầu ra xây dựng chẩn đoán không giúp ích gì. – DannyMeister

Các vấn đề liên quan