2013-05-28 25 views
13

Próbuję dodać dodatkowy plik XML do procesu publikowania. Mam projekt API MVC, który ma również inny projekt (V1.0) dla kontrolerów. Używamy samouczącej się funkcji pomocy, która tworzy pliki .XML dla każdego projektu. Podczas budowania na lokalnym komputerze wszystko działa, ale przy publikowaniu (za pomocą kreatora) nie będzie dołączał tego pliku.Dodawanie dodatkowych plików do opublikowanego projektu API MVC

I zostały próbuje zaktualizować plik publikowania profilu (.pubxml), jak opisano tutaj:

http://www.asp.net/mvc/tutorials/deployment/visual-studio-web-deployment/deploying-extra-files

ale bez powodzenia. Widzę, co następuje:

  • Robię porządek, żeby nic nie wisiało.
  • opublikować z kreatora
  • widzę w apiproject \ bin \ są wszystkie pliki w tym formacie XML apiprojectv1 i dll
  • widzę w apiproject \ obj \ x86 \ Release \ AspnetCompileMerge \ Source \ bin ma dll apiprojectv1 ale nie plik xml
  • widzę same jak powyżej w apiprojet \ obj \ x86 \ Release \ AspnetCompileMerge \ TempBuildDir \ bin
  • widzę takie same jak powyżej w apiproject \ obj \ x86 \ Release \ Package \ PackageTmp \ bin

Nie jestem pewien, dlaczego plik nie jest kopiowany. Jest to mój pełny plik pubxml:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
This file is used by the publish/package process of your Web project. You can customize  the behavior of this process 
by editing this MSBuild file. In order to learn more about this please visit  http://go.microsoft.com/fwlink/?LinkID=208121. 
--> 
<Project ToolsVersion="4.0"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <SiteUrlToLaunchAfterPublish /> 
    <publishUrl>\\myserver\wwwroot\apiproject</publishUrl> 
    <DeleteExistingFiles>False</DeleteExistingFiles> 
    </PropertyGroup> 
    <Target Name="CustomCollectFiles"> 
     <ItemGroup> 
      <_CustomFiles Include="..\bin\apiprojectv1.XML" /> 
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
      <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension) </DestinationRelativePath> 
      </FilesForPackagingFromProject> 
     </ItemGroup> 
    </Target> 
</Project> 

EDIT

ja zapomniałem jedną ważną rolę, aby umieścić poniżej na dole pliku pubxml:

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

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

nie wiem dostać plik, ale teraz pojawia się błąd dotyczący nieznalezienia pliku, (który mogę teraz zdebugować).

Odpowiedz

17

ja ominęło dwie rzeczy:

  1. Druga grupa nieruchomość rzeczywiście powiedzieć, że aby wykonać działanie.
  2. Ścieżka nie było w porządku, musiałem użyć ścieżkę projektu katalogu

Teraz wygląda tak i działa:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
This file is used by the publish/package process of your Web project. You can customize the behavior of this process 
by editing this MSBuild file. In order to learn more about this please visit  http://go.microsoft.com/fwlink/?LinkID=208121. 
--> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <SiteUrlToLaunchAfterPublish /> 
     <publishUrl>\\myserver\wwwroot\apiproject</publishUrl> 
    <DeleteExistingFiles>False</DeleteExistingFiles> 
    </PropertyGroup> 

<Target Name="CustomCollectFiles"> 
    <ItemGroup> 
     <_CustomFiles Include="$(MSBuildProjectDirectory)\bin\apiprojectv1.XML" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension) </DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 

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

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

</Project> 
+1

Nicea, szukałem dokładnym tego rozwiązania i to załatwiło sprawę, dzięki ! – revlayle

+0

Dziękuję, twoje rozwiązanie pracowało dla mnie, aby dołączyć dll generowane przez projekt C++, którego nie można odwoływać się w normalnym projekcie .net! – Mcanic

+0

Nie mogę tego uruchomić. Próbowałem nawet bezwzględnej ścieżki systemu Windows, ale to nie działa. –