Dịch vụ cung cấp dịch vụ bao gồm những gì trong tập tin csproj để làm gì?


194

Trong một giải pháp C #, tôi đã thêm một dự án hiện có.
Sau đó, Visual Studio đã thêm mục sau vào các tệp .csproj khác:

<ItemGroup>
    <Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
</ItemGroup>

Cái này để làm gì?
Tôi có thể xóa nó không?


1
Giải pháp được biên dịch thành công sau khi xóa nó - nhưng câu hỏi là: điều gì xảy ra khi chạy? Tôi phải biết những gì nó làm.
joe

Câu trả lời:


260

Tôi đã có một trường hợp tương tự, trong đó điều này đã được thêm vào:

<ItemGroup>
  <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>

Sự bao gồm này hóa ra được VS2013 tạo ra nhằm mục đích nếu bạn tạo một dự án thử nghiệm NUnit, nhưng quên gắn thẻ nó là dự án thử nghiệm, như được mô tả trong câu trả lời này từ Microsoft:

Hành vi này là cố ý.

Để hỗ trợ các khung thử nghiệm của bên thứ ba, như NUnit và XUnit, Visual Studio 2012 đã tải Test Explorer trên giải pháp mở, bất kể nó có chứa các dự án thử nghiệm hay không. Điều này đã thêm vài giây trì hoãn để khởi động và giải pháp mở kịch bản cho tất cả người dùng, phần lớn trong số họ không sử dụng thử nghiệm.

Trong Visual Studio 2013, chúng tôi đã thay đổi nó để gói Test Explorer chỉ được tải khi giải pháp chứa một hoặc nhiều dự án thử nghiệm. Dự án thử nghiệm được xác định theo hai cách khác nhau. Các dự án được tạo từ một trong các mẫu dự án thử nghiệm đơn vị tích hợp được xác định bằng GUID loại dự án. Các loại dự án khác, chẳng hạn như dự án Thư viện lớp với các bài kiểm tra XUnit hoặc NUnit, được Test Explorer xác định trong lần khám phá thử nghiệm đầu tiên và Thẻ được gắn thẻ với <Service/>mục.


8
Nó vẫn hữu ích cho VS 15.3+ chứ?
Jaanus Varus

5
@JaanusVarus Vâng, điều này vẫn xảy ra trong VS 15.4 (Tôi đã cố gắng hiểu hành vi và điều đó dẫn tôi đến đây). Tôi không chắc liệu quyết định về hiệu suất có nên được xem xét lại hay không, nếu đó là câu hỏi của bạn.
Lars Kemmann

2
Vẫn xảy ra vào 15.6
dimaaan

2
@Adrian Đây là cách bạn đánh dấu nó như một dự án thử nghiệm. Về cơ bản, VS nói, "Có vẻ như đây có thể là một dự án thử nghiệm, vì vậy tôi sẽ tiếp tục và đánh dấu điều đó cho bạn." Hoặc thêm loại dự án được đề cập trong câu trả lời của Vladimir.
GalacticCowboy

2
Với Visual Studio 2017 (Phiên bản 15.x), vấn đề này đã đến và biến mất. Xem chủ đề này cho một lịch sử. Chủ đề này cũng đề cập đến điều này cuối cùng sẽ được sửa trong Visual Studio 15.7
Được cấu trúc vào

35

Cá nhân tôi không thích dịch vụ này được thêm vào các tệp dự án của mình và tôi nghĩ rằng nó giống như một cách giải quyết hơn là một giải pháp thích hợp. Vì vậy, việc đánh dấu các dự án thử nghiệm của bạn là các dự án thử nghiệm có vẻ đúng hơn đối với tôi và điều này có thể đạt được bằng cách thêm nó vào đầu tiên PropertyGroup:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<TestProjectType>UnitTest</TestProjectType>

{3AC096D0-A1C2-E12C-1390-A8335801FDAB}có nghĩa là Dự án thử nghiệm và {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}- C #. Đối với các hướng dẫn loại dự án khác đi đây


11
^ Tôi cũng thích ProjectTypeGuidsnhưng nếu bạn đang thực hiện phát triển đa nền tảng và sử dụng MonoDevelop, bạn sẽ không thể mở {3AC096D0-A1C2-E12C-1390-A8335801FDAB}các dự án: "Loại dự án này không được MonoDevelop hỗ trợ". Cả hai IDE có vẻ hạnh phúc nếu bạn chỉ cần loại bỏ dự án thử nghiệm GUID.
WynandB

3
Tôi tự hỏi những loại có thể khác cho <TestProjectType> là gì? Không thể tìm thấy bất kỳ thông tin về nó.
J Pollack

12

Điểm hay của GUID nổi tiếng / không đổi là chúng khá độc đáo và do đó rất dễ tìm kiếm trong Google. Mà tôi đã làm, và tìm thấy: cái nàycái này , cũng như những bản hit thú vị khác.
Có vẻ như đây thực sự là một lỗi đã biết trong công cụ DSL T4 đi kèm với SDK. Và may mắn thay, nó đủ dễ để giải quyết bằng cách thay đổi một số khoá đăng ký.


8
Và bây giờ khi tôi tìm kiếm nó, tôi nhận được câu hỏi SO này ;-).
biley

Rõ ràng, lỗi DSL T4 là thẻ dịch vụ B4F97281-0DBD-4835-9ED8-7DFB966E87FF đã được thêm vào tất cả các dự án, ngay cả khi chúng không sử dụng T4. Lỗi đó đã được sửa trong Visual Studio 2008. Thẻ dịch vụ vẫn được thêm vào các dự án sử dụng T4 (mặc dù GUID khác). Điều này vẫn còn trong trường hợp trong VS2017.
duncanp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.