2010-10-25 25 views
10

Tôi dành phần lớn thời gian của mình để phát triển các điều khiển cho cả WPF và Silverlight sử dụng cùng một codebase. Để làm điều này, tôi thêm các tập tin hiện có từ một dự án (nói Silverlight) là "các liên kết" cho một dự án khác (nói WPF). Đối với những khác biệt nhỏ, tôi sử dụng chỉ thị tiền xử lý nhưVisual Studio: "Tài liệu này được mở bởi một dự án khác"

#if SILVERLIGHT 
... 
#else 
... 
#endif 

Mã trong các khối này chuyển sang màu xám tùy thuộc vào loại dự án bạn đã mở tệp. Vì vậy, nếu bạn mở tập tin của bạn từ dự án Silverlight (nơi SILVERLIGHT được xác định) phần khác là màu xám và Intellisense không hoạt động trong đó.

Để phần WPF được xử lý bởi IDE (với hỗ trợ màu và Intellisense), bạn cần mở tệp từ dự án WPF. Khi bạn cố gắng làm điều đó bạn nhận được một hộp thông báo rằng "Tài liệu này được mở bởi một dự án khác" và khi bạn nhấp vào OK, nó sẽ hiển thị tệp đó trong ngữ cảnh của dự án Silverlight (không phải những gì tôi muốn xem). Vì vậy, tôi phải đóng tập tin, điều hướng đến dự án WPF một lần nữa và mở tập tin một lần nữa. Điều này rất, rất khó chịu. Vì vậy, câu hỏi là: có một số loại thiết lập hoặc tiện ích mà có thể làm cho Visual Studio mở lại tệp từ dự án mà tôi bấm đúp vào nó thay vì hiển thị hộp thông báo ngu ngốc đó và hiển thị cho tôi tệp đó từ dự án "sai"?

+4

Cho đến nay không có giải pháp cho vấn đề này ngoài việc đóng tệp. Ngoài ra, nó là lý do cho dll khóa "Không thể xây dựng ..." ngoại lệ trong VS2010. –

+0

Tôi tự hỏi nếu về mặt lý thuyết có thể cho bổ trợ để xử lý điều này: được thông báo trước khi người dùng cố gắng mở tệp, xem liệu tệp đó đã được mở từ một dự án khác chưa, hãy đóng tệp đó và mở lại từ dự án hiện tại. Âm thanh khả thi nếu các API như vậy được đặt ra. –

+1

Người đàn ông, điều đó sẽ thực sự tốt. Thật khó chịu khi phải đóng và mở tập tin mọi lúc. – andrecarlucci

Trả lời

2

Bạn có thể làm việc này dễ dàng hơn khi sử dụng bằng cách sử dụng một phần và nhiều tệp: mã chia sẻ giống nhau cho cả WPF và Silverlight trong tệp được chia sẻ được liên kết và một tệp riêng biệt cho mỗi tệp có chứa mã cụ thể một hoặc cái khác (với các ký hiệu phương thức/thuộc tính giống hệt nhau), mỗi cái chỉ nằm trong một trong các dự án. Thực hiện điều này cho phép cả hai phiên bản WPF và Silverlight được mở cùng một lúc (vì chúng là các tệp riêng biệt) với chi phí thêm một loạt chi phí quản lý tệp bổ sung.

Ngoài ra, nhận thêm bộ nhớ và sử dụng các giải pháp riêng biệt.

+0

Tôi chia sẻ tập tin giữa hai dự án trong cùng một giải pháp - và VS nghèo liên tục mang lại cho tôi thông báo "mở bởi dự án khác". Lỗi này đã có cho nhiều phiên bản của VS (Tôi đang sử dụng VS2015). Tôi tự hỏi nếu có ai đã báo cáo nó với MSFT để họ biết về nó. –

4

Điều này đã xảy ra với tôi khoảng hai lần trong một tháng, không phải trong một ứng dụng WPF. Không có ý tưởng tại sao nó xảy ra nhưng trong cả hai trường hợp sửa chữa là để làm sạch giải pháp, khởi động lại máy tính (không chỉ khởi động lại Visual Studio) và sau đó xây dựng các giải pháp.

1

Có điều này có thể sử dụng Visual Studio Shell.

Đầu tiên thuyết minh EnvDTE80.DTE2 đối tượng:

private static EnvDTE80.DTE2 _dte; 

public static EnvDTE80.DTE2 DTE 
{ 
    get 
    { 
     if (_dte == null) 
      _dte = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2; 

     return _dte; 
    } 
} 

và sau đó:

// On Document Opening, close the existing instances. 
// This event occurs when you double-click file in Solution Explorer. 

DTE.Events.DocumentEvents.DocumentOpening += (s, e) => 
{ 
    if(!DTE.ItemOperations.IsFileOpen(YOURFILENAME)) 
     return; 

    foreach(Window win in DTE.Documents.Cast<Document>() 
         .FirstOrDefault(s => s.FullName == YOURFILENAME).Windows)) 
     win.Close(); 
} 

// next; VS itself will call DTE.ItemOperatins.OpenFile(YOURFILENAME); 

HTH.

1

Nó xảy ra với tôi, khi tôi có một dự án chứa tệp được liên kết của dự án khác theo một giải pháp VS. Khi tôi cố gắng điều hướng đến định nghĩa của một phương thức trong tệp được nối kết, VS được nhắc với một thông báo rằng tài liệu này được mở bởi một dự án khác.

Để giải quyết vấn đề này, tôi phải dỡ bỏ dự án sở hữu tệp gốc từ giải pháp VS. Sau đó điều hướng đến định nghĩa phương thức trong thời gian bình thường và thời gian gỡ lỗi không phải là một vấn đề.

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