2009-03-16 28 views
67

Tôi có thể loại trừ một thư mục hoặc tệp khi tôi xuất bản một trang web trong Visual Studio 2005 không? Tôi có nhiều tài nguyên mà tôi muốn giữ trong tay trong Solution Explorer, chẳng hạn như các tệp cấu hình thay thế cho các môi trường khác nhau, nhưng tôi không thực sự muốn xuất bản chúng lên máy chủ. Có cách nào để loại trừ chúng không? Khi sử dụng các loại dự án khác, chẳng hạn như một tập hợp .dll, tôi có thể đặt thuộc tính Build Action của tệp thành "Không" và thuộc tính Sao chép vào Thư mục Đầu ra thành "Không sao chép". Tôi không thể tìm thấy bất kỳ cài đặt tương tự nào cho các tệp trong trang web.Loại trừ các tệp khỏi trang web xuất bản trong Visual Studio

Nếu IDE không cung cấp tính năng này, có ai có kỹ thuật tốt để xử lý các tệp đó không?

+3

Ở đây bạn có thể tìm thấy một giải pháp rất đơn giản: http://stackoverflow.com/questions/1288858/how-to-exclude-web-config-when-publishing-with-visual-web-developer-express –

Trả lời

29

Nếu bạn có thể xác định tệp dựa trên tiện ích mở rộng, bạn có thể định cấu hình tệp này bằng cách sử dụng buildproviders tag in the web.config. Thêm phần mở rộng và ánh xạ nó vào ForceCopyBuildProvider. Ví dụ, để cấu hình .xml tập tin được sao chép với một hành động xuất bản, bạn sẽ làm như sau:

<configuration>... 
    <system.web>... 
     <compilation>... 
      <buildProviders> 
       <remove extension=".xml" /> 
       <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" /> 
      </buildProviders> 

Để giữ một tập tin cho phép sao chép, bạn muốn làm điều tương tự nhưng sử dụng System.Web .Compilation.IgnoreFileBuildProvider làm loại.

+0

Siêu mát mẻ . Đã không có may mắn với ExcludeFromPackageFiles được đề xuất trong tệp wpp.targets.Sau này là khá vô dụng vì nó dường như không hỗ trợ các ký tự đại diện với các thư mục sâu hơn một cấp. Cảm ơn – DvS

1

Tính năng bạn đang tìm kiếm tồn tại nếu dự án của bạn được tạo dưới dạng "Ứng dụng web". Web Trang web "dự án" chỉ là một tập hợp các tệp được coi là 1: 1 với những gì được triển khai cho máy chủ web.

Về mặt chức năng cả hai đều giống nhau, tuy nhiên ứng dụng web biên dịch tất cả mã nguồn thành DLL, thay vì tệp mã nguồn trần được sao chép vào máy chủ web và được biên dịch khi cần.

5

Tôi nghĩ rằng bạn chỉ có hai lựa chọn ở đây:

  • Sử dụng 'Loại trừ Từ Project' tính năng . Điều này không lý tưởng vì mục dự án sẽ bị loại trừ khỏi mọi hoạt động kiểm soát nguồn IDE tích hợp. Bạn sẽ cần phải bấm vào 'Show All Files' nút trên cửa sổ Solution nếu bạn cần để xem các file trong Solution Explorer, nhưng điều đó cũng cho thấy tập tin và thư mục bạn không quan tâm.
  • Sử dụng tập lệnh sự kiện sau khi xây dựng để xóa bất kỳ mục dự án nào mà bạn không muốn được xuất bản (giả sử bạn đang xuất bản lên thư mục cục bộ sau đó tải lên máy chủ).

Tôi đã trải qua điều này trước và không thể tìm ra bất kỳ thứ gì thực sự thanh lịch.

10

Tôi đã gặp khó khăn với cùng một vấn đề và cuối cùng đã kéo kích hoạt chuyển đổi trang web thành ứng dụng web. Một khi tôi đã làm điều này, tôi đã có tất cả các lợi ích IDE như xây dựng hành động, và nó được biên dịch nhanh hơn để khởi động (không có trang web xác nhận hợp lệ hơn ...).

Bước 1: Chuyển đổi 'trang web' của bạn thành 'ứng dụng web'. Để chuyển đổi nó, tôi vừa tạo ra một "ứng dụng web" mới, thổi đi tất cả các tập tin mà nó tạo ra tự động, và sao chép và dán trang web của tôi vào. Điều này làm việc tốt. Lưu ý rằng các tệp báo cáo sẽ cần phải có Hành động xây dựng được đặt thành "Nội dung" thay vì "không có".

Bước 2: Bây giờ bạn có thể đặt bất kỳ tệp "Xây dựng hành động" bất động sản.

Hy vọng điều này sẽ hữu ích.

98

Bạn có thể loại trừ thư mục và tệp bằng cách thêm các thành phần ExcludeFilesFromDeploymentExcludeFoldersFromDeployment vào tệp dự án của bạn (.csproj, .vbproj, v.v.). Hãy thêm chúng vào trong số PropertyGroup thích hợp như được hiển thị bên dưới:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    ... 
    <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
    <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment> 
    <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 
</PropertyGroup> 

Ký tự đại diện được hỗ trợ.

Trong ví dụ trên:

  • Các ExcludeFilesFromDeployment 1 không bao gồm File1.aspx (trong thư mục gốc của dự án) và folder2 \ File2.aspx (folder2 là trong thư mục gốc của dự án)
  • Các ExcludeFilesFromDeployment 2 không bao gồm tất cả các file trong bất kỳ thư mục có tên svn và bất kỳ thư mục con của nó
  • các ExcludeFoldersFromDeployment không bao gồm thư mục có tên fOLDER1 (trong thư mục gốc của dự án) và folder2 \ Folder2a (folder2 là trong thư mục gốc của dự án)

Để biết thêm thông thấy Web Deployment: Excluding Files and Folders via the Web Application’s Project File

+1

Có cách nào để sử dụng ký tự đại diện cho người dùng này không? – roydukkey

+0

@roydukkey Có, ký tự đại diện được hỗ trợ. – Keith

+3

Điều này là tốt hơn nhiều so với câu trả lời được chấp nhận cho tôi vì tôi muốn loại trừ tệp Web.config trong Xuất bản! –

22

Thật ngạc nhiên là câu trả lời cho Visual Studio 2012 không phải là ở đây:

  • Câu trả lời có dấu kiểm màu xanh lá cây không phải là câu trả lời.

  • Câu trả lời "được tăng cao nhất" tham chiếu một bài viết từ năm 2010 và cho biết bạn phải chỉnh sửa tệp dự án csproj của bạn hiện không chính xác. Tôi đã thêm phần tử ExcludeFoldersFromDeployment XML vào tệp csproj Visual Studio 2012 của mình và nó không làm gì, phần tử được coi là không hợp lệ, điều này là do ExcludeFoldersFromDeployment đã được chuyển sang tệp .pubxml.

Đối với các ứng dụng web và trang web bạn chỉnh sửa các tập tin .pubxml!

Bạn có thể làm theo câu trả lời của tôi hoặc thử hướng dẫn này mà tôi tìm thấy sau: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure-on-iis-and-skip-deleting-it-with-msdeployskiprules.html#sthash.MSsQD8U1.dpbs

Vâng, bạn có thể làm được điều này không chỉ cho các dự án website nhưng trang web quá. Tôi đã dành một thời gian dài trên internet tìm kiếm khả năng loại trừ khó nắm bắt này với một Website Visual Studio (dự án KHÔNG Website) và trước đây đã kết luận nó là không thể nhưng có vẻ như là:

Trong [mypublishwebsitename] .pubxml của bạn tập tin, tìm thấy trong ~/Properties/PublishProfiles cho các dự án ứng dụng Web và ~/App_Data/PublishProfiles cho trang web, chỉ cần thêm:

<ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
<ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 

như trẻ em đến các yếu tố chính <PropertyGroup> trong tập tin .pubxml của bạn. Không cần phải thêm một phần tử mới trừ khi bạn đang khóa một kiểu xây dựng cụ thể, như phát hành hoặc gỡ lỗi.

NHƯNG WAIT !!!

Nếu bạn đang loại bỏ các file từ máy chủ đích/mục tiêu của bạn với các thiết lập sau đây trong cấu hình Publish của bạn:

enter image description here

Sau đó, Web Publish quá trình sẽ xóa trên máy chủ bất cứ điều gì nguồn/mục tiêu của bạn bị loại trừ, như một mục bạn đã mô tả trong số <ExcludeFoldersFromDeployment><ExcludeFilesFromDeployment>!

MsDeploy Rules Skip để giải cứu:

Thứ nhất, Web Xuất bản sử dụng một cái gì đó khác hơn MSBuild xuất bản (gọi tắt là công tác IO hoặc một cái gì đó như thế) nhưng nó có một lỗi và sẽ không nhận ra bỏ quy tắc, vì vậy bạn phải thêm vào .pubxml của bạn:

<PropertyGroup> 
    <WebPublishMethod>MSDeploy</WebPublishMethod> 
</PropertyGroup> 

tôi sẽ giữ <WebPublishMethod> trong của nó riêng <PropertyGroup>, bạn sẽ nghĩ rằng bạn chỉ có thể có một phần tử trong <PropertyGroup> .pubxml của bạn, nhưng tôi Rules Bỏ qua đã không được gọi cho đến khi tôi chuyển <WebPublishMethod> thành phần tử <PropertyGroup> riêng. Có, điên rồ, nhưng thực tế bạn cần phải làm tất cả điều này cho Web Publish để loại trừ và cũng không xóa một thư mục/tập tin trên máy chủ của bạn là điên.

Bây giờ SkipRules thực tế của tôi, ExcludeFolders và tờ khai ExcludeFiles trong .pubxml tôi:

<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment> 
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment> 
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment> 
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment> 
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest> 

Và bây giờ là một quy tắc Skip (<Target> là con của <Project> trong .pubxml của bạn): (Bạn có thể có thể để lại <SkipAction> trống để Bỏ qua tất cả những hành động nhưng tôi đã không kiểm tra đó và không chắc chắn.

<Target Name="AddCustomSkipRules"> 
    <Message Text="Adding Custom Skip Rules" /> 
    <ItemGroup> 
     <MsDeploySkipRules Include="SkipConfigFolder"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>dirPath</ObjectName> 
     <AbsolutePath>$(_DestinationContentPath)\\Config</AbsolutePath> 
     <XPath> 
     </XPath> 
     </MsDeploySkipRules> 
     <MsDeploySkipRules Include="SkipPhotosFolder"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>dirPath</ObjectName> 
     <AbsolutePath>$(_DestinationContentPath)\\Photos</AbsolutePath> 
     <XPath> 
     </XPath> 
     </MsDeploySkipRules> 
     <MsDeploySkipRules Include="SkipWebConfig"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>filePath</ObjectName> 
     <AbsolutePath>$(_DestinationContentPath)\\Web\.config</AbsolutePath> 
     <XPath> 
     </XPath> 
     </MsDeploySkipRules> 
     <MsDeploySkipRules Include="SkipWebConfig"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>dirPath</ObjectName> 
     <AbsolutePath>$(_DestinationContentPath)\\Temp</AbsolutePath> 
     <XPath> 
     </XPath> 
     </MsDeploySkipRules> 
    </ItemGroup> 
    </Target> 

Và xin vui lòng, đừng quên để thoát khỏi các . trong một rulePath Bỏ qua quy tắc với một dấu gạch chéo ngược.

+0

Bạn đã bỏ lỡ ghi chú của OP về VS2015 ... mục đích và mục đích của Giải Đáp là dành cho [tag: visual-studio-2015] chứ không phải [tag: visual-studio-2012] – GoldBishop

+0

@GoldBishop OP được đề cập đến Visual Studio 2005 và gắn thẻ câu hỏi của mình là Visual Studio 2005, vậy bạn đang nói về cái gì? Câu hỏi SO này xuất hiện ở đầu kết quả của Google cho "Loại trừ các tệp khỏi xuất bản trang web trong Visual Studio" giống như kết quả bằng cách này. –

+0

'Thật ngạc nhiên câu trả lời cho Visual Studio 2012 không có ở đây:', mặc dù tương tự không có liên quan thực sự với [tag: visual-studio-2005], do đó không thêm giá trị cho Câu hỏi OP. Có thể tạo ra một bài trả lời cho [tag: visual-studio-2012], nó liên kết tất cả các phiên bản VS thành một bài viết. – GoldBishop

5

Trong Visual Studio 2013 tôi tìm thấy câu trả lời của Keith, thêm phần tử ExcludeFoldersFromDeployment vào tệp dự án, không hoạt động (tôi chưa đọc câu trả lời của Brian Ogden). Tuy nhiên, tôi thấy tôi có thể loại trừ một file văn bản khi xuất bản trong Visual Studio 2013 bằng cách chỉ cần thiết lập các thuộc tính sau vào file văn bản riêng của mình:

1) Xây dựng hành động: Không

2) Sao chép vào Output Directory: Đỗ không sao chép

Ban đầu tôi đã thử đặt thuộc tính Sao chép vào Thư mục Đầu ra nhưng không hoạt động khi Tác vụ Xây dựng được đặt thành giá trị mặc định, Nội dung. Khi tôi đặt Build Action thành None, tập tin văn bản không còn được sao chép vào thư mục đích khi xuất bản.

Để xem các thuộc tính này trong GUI của Visual Studio, trong Solution Explorer, nhấp chuột phải vào tệp bạn muốn loại trừ và chọn Thuộc tính từ trình đơn ngữ cảnh.

+0

Điều này làm việc trong Visual Studio 2015 xuất bản Azure. – Chris

+2

Sự cố là khi bạn chỉ cần loại trừ các tệp đối với một số môi trường đích nhất định (Cấu hình Xây dựng). Điều này thật đau đớn. – benmccallum

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