tutorial - web api rest c#
agregar archivos adicionales al proyecto de la API MVC publicada (1)
Estoy tratando de agregar un archivo XML adicional a un proceso de publicación. Tengo un proyecto MVC API que también tiene otro proyecto (V1.0) para controladores. Estamos utilizando la funcionalidad de autoeducación de ayuda que crea los archivos .XML para cada proyecto. Al construir en la máquina local, todo funciona, pero al publicar (con el asistente) no incluirá este archivo.
He intentado actualizar el archivo de perfil de publicación (.pubxml) como se describe aquí:
http://www.asp.net/mvc/tutorials/deployment/visual-studio-web-deployment/deploying-extra-files
pero sin éxito. Puedo ver que lo siguiente está sucediendo:
- Hago una limpieza para asegurar que no haya nada.
- Publico con asistente
- Puedo ver en apiproject / bin / todos los archivos incluidos los archivos apiprojectv1 xml y dll
- Puedo ver en apiproject / obj / x86 / Release / AspnetCompileMerge / Source / bin que tiene el dll de apiprojectv1 pero no el archivo xml
- Puedo ver lo mismo que en el apiprojet / obj / x86 / Release / AspnetCompileMerge / TempBuildDir / bin
- Puedo ver lo mismo que en el apiproject / obj / x86 / Release / Package / PackageTmp / bin
No estoy seguro de por qué no se está copiando el archivo. Este es mi archivo pubxml completo:
<?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>
EDITAR
Había olvidado una parte importante, poner lo siguiente en la parte inferior del archivo pubxml:
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
No obtengo el archivo, pero ahora recibo un error con respecto al archivo que no se encuentra, (que ahora puedo depurar).
Me había perdido dos cosas:
- El segundo grupo de propiedades que realmente le dice que realice la acción.
- La ruta no era correcta, tenía que usar la ruta del directorio del proyecto
Ahora se ve así y funciona:
<?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>