2014-04-19 23 views
5

Tôi có một dự án ứng dụng web:cách đổi tên để triển khai web?

enter image description here

Như bạn có thể thấy, có 3 file robots.txt - một cho mỗi môi trường. Ngoài ra còn có 3 hồ sơ xuất bản.

Hiện tại, đối với mỗi pubxml tôi muốn chọn đúng tệp "robots.xxx.txt" và đổi tên thành "robots.txt". Lý tưởng nhất là tôi muốn tận dụng MSBuild và giữ cấu hình trong mỗi tệp pubxml.

Từng tiểu sử xuất bản 3 đang sử dụng <WebPublishMethod>MSDeploy</WebPublishMethod>.


EDIT:

Chỉ cần cố gắng Richard Szalay answer, tuy nhiên không có kết quả. Tất cả 3 tệp vẫn được sao chép vào thư mục đầu ra. Đây là hồ sơ xuất bản của tôi trông giống như bây giờ

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <WebPublishMethod>FileSystem</WebPublishMethod> 
     <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
     <LastUsedPlatform>Any CPU</LastUsedPlatform> 
     <SiteUrlToLaunchAfterPublish /> 
     <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
     <PrecompileBeforePublish>True</PrecompileBeforePublish> 
     <EnableUpdateable>True</EnableUpdateable> 
     <DebugSymbols>False</DebugSymbols> 
     <WDPMergeOption>DonotMerge</WDPMergeOption> 
     <ExcludeApp_Data>True</ExcludeApp_Data> 
     <publishUrl>C:\Temp\myproject</publishUrl> 
     <DeleteExistingFiles>False</DeleteExistingFiles> 
    </PropertyGroup> 

    <ItemGroup> 
     <MsDeployReplaceRules Include="robots"> 
      <ObjectName>filePath</ObjectName> 
      <Match>robots\.debug\.txt</Match> 
      <Replace>robots.txt</Replace> 
     </MsDeployReplaceRules> 
    </ItemGroup> 
</Project> 

Trả lời

3

Điều bạn cần là quy tắc thay thế. Chỉ cần thêm những điều sau đây vào hồ sơ công bố của bạn:

<ItemGroup> 
    <MsDeployReplaceRules Include="robots"> 
    <ObjectName>filePath</ObjectName> 
    <Match>robots\.debug\.txt</Match> 
    <Replace>robots.txt</Replace> 
    </MsDeployReplaceRules> 
</ItemGroup> 

Nếu tập tin quy ước đặt tên phù hợp với hồ sơ công bố của bạn, bạn có thể lựa chọn tạo một Robots.wpp.targets tập tin duy nhất trong thư mục gốc của ứng dụng web của bạn và sử dụng như sau:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <MsDeployReplaceRules Include="robots"> 
     <ObjectName>filePath</ObjectName> 
     <Match>robots\.$(PublishProfileName)\.txt</Match> 
     <Replace>robots.txt</Replace> 
    </MsDeployReplaceRules> 
    </ItemGroup> 
</Project> 
+0

Cảm ơn bạn đã trả lời. Tôi đã thử mã, nhưng tôi nghĩ rằng tôi đang làm điều gì đó sai trái. Bạn có thể vui lòng xem câu hỏi được cập nhật. – niaher

2

Tôi không biết liệu đây có phải là kỹ thuật đúng hay không, nhưng nó có hiệu quả đối với tôi.

Trong file pubxml của bạn, dưới nút PropertyGroup thêm nút này:

<Target Name="MoveRobotsTxt" AfterTargets="GatherAllFilesToPublish"> 
    <Move Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.release.txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
    <Delete Files="obj\$(ConfigurationName)\Package\PackageTmp\robots.release.txt" /> 
</Target> 

Nếu bạn sử dụng nhiều hơn là chỉ Release, bạn sẽ cần phải sao chép lệnh Move và thay đổi Release|AnyCPU tên xây dựng của bạn hoặc sử dụng biến đặc biệt $ (ConfigurationName).

Như bạn không có một robots.txt hiện tại bạn muốn thay thế chỉ khi nó là phiên bản phát hành, có thể bạn sẽ muốn:

<Target Name="MoveRobotsTxt" AfterTargets="GatherAllFilesToPublish"> 
    <Move SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.$(ConfigurationName).txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
</Target> 

Các lớn ah-ha đối với tôi là việc thực hiện các pubxml giống như một tệp dự án và bạn có thể sử dụng tất cả các lệnh tương tự mà bạn sử dụng cho msbuild.

Trong khi cố gắng giải quyết vấn đề này, tôi thấy có một vài thay đổi giữa năm 2010 và 2012 có thể giải thích tại sao câu trả lời của Richard không hoạt động.

EDIT:

câu trả lời ban đầu của tôi đã không làm việc với MSBuild đối với một số lý do, các đường ống dẫn dường như khác nhau giữa MSBuild và Visual Studio.

Ngoài ra, mục tiêu trong tiểu sử xuất bản không được chạy.Vì vậy, tôi thay đổi nội dung dự án của tôi tập tin thêm này ở cuối sau khi nhận xét ra BeforeBuild/AfterBuild:

<Target Name="move_robots_in_msbuild" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
    <Move Condition=" '$(Configuration)' == 'Live' " SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
    <Delete Files="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" /> 
</Target> 
<Target Name="move_robots_in_visual_studio" AfterTargets="GatherAllFilesToPublish"> 
    <Move Condition=" '$(Configuration)' == 'Live' " SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
    <Delete Files="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" /> 
</Target> 
0

tôi đã cùng một vấn đề sáng nay nhưng hai câu trả lời cung cấp ở trên không làm việc cho tôi cả.

Cuối cùng tôi tiếp bài viết này - http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files

Sau đó thêm đánh dấu này ngay trước thẻ trong debug của tôi, phát hành và dàn dựng .pubxml file, đổi tên robots.release.txt một cách thích hợp:

<Target Name="CustomCollectFiles"> 
    <ItemGroup> 
     <_CustomFiles Include="robots.release.txt" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>%(RecursiveDir)robots.txt</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 

    <CopyAllFilesToSingleFolderForMsdeployDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForMsdeployDependsOn> 
    </PropertyGroup> 

tôi hy vọng điều này sẽ giúp bất kỳ ai gặp phải vấn đề tương tự.

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