vscode visual vista studio recomendadas previa para ordenar mejores las iconos extensiones desarrollo configurar codigo code visual-studio-2010 visual-studio web-deployment msdeploy

visual studio 2010 - visual - ¿Cómo se incluyen archivos adicionales utilizando paquetes de despliegue web VS2010?



ordenar codigo visual studio code (6)

Estoy probando el uso de la nueva funcionalidad de empaquetado web en visual studio 2010 y me encontré con una situación en la que uso un evento de preconstrucción para copiar los archivos .dll necesarios en mi carpeta bin de la que mi aplicación depende para las llamadas API. No se pueden incluir como referencia ya que no son DLL COM que se pueden usar con interoperabilidad.

Cuando construyo mi paquete de implementación, esos archivos se excluyen cuando elijo la opción para incluir solo los archivos necesarios para ejecutar la aplicación. ¿Hay alguna manera de configurar las configuraciones de implementación para incluir estos archivos? No he tenido suerte para encontrar una buena documentación sobre esto.


Al igual que @toxaq, pero una solución aún más simple es:

En el explorador de soluciones, agregue el archivo como un enlace a la biblioteca / carpeta de referencias, y luego en las propiedades configúrelo para copiarlo al resultado de la compilación.


Como una adición a la respuesta de Sayed, descubrí que una declaración estática de elementos ExcludeFromPackageFiles dentro de mi proyecto no era suficiente. Necesitaba excluir ciertas DLL que solo estaban disponibles después de la compilación (módulos Ninject específicos de Azure que no son necesarios cuando implemento en IIS).

Así que intenté engancharme en la generación de mi lista ExcludeFromPackageFiles usando el truco de CopyAllFilesToSingleFolderForPackageDependsOn publicado anteriormente. Sin embargo, esto es demasiado tarde ya que el proceso de empaquetado ya eliminó los elementos ExcludeFromPackageFiles. Entonces, utilicé la misma técnica, pero un poco antes:

<PropertyGroup> <ExcludeFilesFromPackageDependsOn> $(ExcludeFilesFromPackageDependsOn); _ExcludeAzureDlls </ExcludeFilesFromPackageDependsOn> </PropertyGroup> <Target Name="_ExcludeAzureDlls"> <ItemGroup> <FilesForPackagingFromProjectWithNoAzure Include="@(FilesForPackagingFromProject)" Exclude="%(RootDir)%(Directory)*Azure*.dll" /> <AzureFiles Include="@(FilesForPackagingFromProject)" Exclude="@(FilesForPackagingFromProjectWithNoAzure)" /> <ExcludeFromPackageFiles Include="@(AzureFiles)"> <FromTarget>_ExcludeAzureEnvironmentDlls</FromTarget> </ExcludeFromPackageFiles> </ItemGroup> </Target>

Espero que ayude a alguien ...


Entonces la implementación de Sayed no funcionó para mí. Estoy usando VS2013 y utilizando el paquete de Web Deploy y necesitaba agregar algunas DLL de complemento de otra carpeta al contenedor del paquete de implementación. Así es como me las arreglé para que funcione (mucho más fácil):

En la parte inferior de su archivo csproj, agregue:

<Target Name="AdditionalFilesForPackage" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy"> <ItemGroup> <Files Include="../SomeOtherProject/bin/$(Configuration)/*.*"/> </ItemGroup> <Copy SourceFiles="@(Files)" DestinationFolder="$(_PackageTempDir)/bin/" /> </Target>

Otras menciones en el archivo csproj:

<PropertyGroup Condition=" ''$(Configuration)|$(Platform)'' == ''Release|AnyCPU'' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <OutputPath>bin/</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <DeployOnBuild>true</DeployOnBuild> <DeployTarget>Package</DeployTarget> <DeployIisAppPath>Default Web Site/MyWebsite</DeployIisAppPath> <DesktopBuildPackageLocation>../output/Service/Service/Service.Release.zip</DesktopBuildPackageLocation> <FilesToIncludeForPublish>OnlyFilesToRunTheApp</FilesToIncludeForPublish> <ExcludeGeneratedDebugSymbol>true</ExcludeGeneratedDebugSymbol> <PublishDatabases>false</PublishDatabases> </PropertyGroup> <Import Project="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v12.0/WebApplications/Microsoft.WebApplication.targets" />


Gran pregunta Acabo de publicar una entrada de blog muy detallada sobre esto en Web Deployment Tool (MSDeploy): Build Package, que incluye archivos extra o excluye archivos específicos .

Aquí está la sinopsis. Después de incluir archivos, también muestro cómo excluir archivos.

Incluyendo archivos extra

Incluir archivos extra en el paquete es un poco más difícil, pero aún no hay bigee si te sientes cómodo con MSBuild, y si no estás leyendo esto. Para hacer esto, necesitamos conectarnos a la parte del proceso que recopila los archivos para el empaquetado. El objetivo que necesitamos extender se llama CopyAllFilesToSingleFolder. Este objetivo tiene una propiedad de dependencia, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, que podemos aprovechar e inyectar nuestro propio objetivo. Así que crearemos un objetivo llamado CustomCollectFiles e inyectaremos eso en el proceso. Logramos esto con lo siguiente (recuerde después de la declaración de importación).

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

Esto agregará nuestro objetivo al proceso, ahora tenemos que definir el objetivo en sí. Supongamos que tiene una carpeta llamada Extra Files que se encuentra 1 nivel por encima de su proyecto web. Desea incluir todos esos archivos. Aquí está el objetivo CustomCollectFiles y discutiremos después.

<Target Name="CustomCollectFiles"> <ItemGroup> <_CustomFiles Include="../Extra Files/**/*" /> <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> <DestinationRelativePath>Extra Files/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target>

Aquí lo que hice fue crear el elemento _CustomFiles y en el atributo Include le dije que recogiera todos los archivos en esa carpeta y cualquier carpeta debajo de ella. Si por casualidad necesita excluir algo de esa lista, agregue un atributo Exclude a _CustomFiles .

Luego utilizo este elemento para completar el elemento FilesForPackagingFromProject. Este es el elemento que MSDeploy realmente usa para agregar archivos extra. También tenga en cuenta que he declarado el valor DestinationRelativePath de metadatos. Esto determinará la ruta relativa que se colocará en el paquete. Usé la declaración Extra Files% (RecursiveDir)% (Filename)% (Extension) aquí. Lo que está diciendo es colocarlo en la misma ubicación relativa en el paquete que en la carpeta Extra Files.

Excluyendo archivos

Si abre el archivo de proyecto de una aplicación web creada con VS 2010 hacia la parte inferior del mismo, encontrará una línea con.

<Import Project="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v10.0/WebApplications/Microsoft.WebApplication.targets" />

Por cierto, puede abrir el archivo de proyecto dentro de VS. Haga clic con el botón derecho en la selección del proyecto Descargar proyecto. A continuación, haga clic derecho en el proyecto descargado y seleccione Editar proyecto.

Esta declaración incluirá todos los objetivos y tareas que necesitamos. La mayoría de nuestras personalizaciones deben realizarse después de esa importación, si no está seguro, ¡si lo hizo después! Entonces, si tiene archivos para excluir, hay un nombre de elemento, ExcludeFromPackageFiles, que se puede usar para hacerlo. Por ejemplo, digamos que tiene un archivo llamado Sample.Debug.js que se incluye en su aplicación web, pero desea que ese archivo se excluya de los paquetes creados. Puede colocar el fragmento a continuación después de esa declaración de importación.

<ItemGroup> <ExcludeFromPackageFiles Include="Sample.Debug.xml"> <FromTarget>Project</FromTarget> </ExcludeFromPackageFiles> </ItemGroup>

Al declarar poblar este elemento, los archivos se excluirán automáticamente. Tenga en cuenta el uso de los metadatos FromTarget aquí. No entraré en eso aquí, pero debes saber especificarlo siempre.


Quería comentar para enfatizar el comentario de Emil Lerch arriba. Si ha instalado un SDK de Azure, busque una DependencyProperty diferente.

Básicamente, puede que necesites usar "CopyAllFilesToSingleFolderForMsdeployDependsOn" en lugar de "CopyAllFilesToSingleFolderForPackageDependsOn". No soy realmente un tipo avanzado de MsBuild y perdí muchas horas tratando de determinar por qué no se llamaba a mis objetivos.

Aquí hay otro enlace si esto no funciona para usted y ha instalado un SDK de Azure:


Una solución más simple es editar el archivo csproj para incluir el dll requerido en la carpeta bin y luego crear un objetivo beforebuild para copiar el elemento en la carpeta bin desde la carpeta común de la biblioteca donde almacenamos dlls de terceros. Debido a que el elemento existe en el archivo de solución, msbuild / msdeploy lo implementa y no se necesita nada complicado.

Etiqueta utilizada para incluir archivos sin agregarlos a través de VS (que generalmente querrán agregarlos a su VCS)

<Content Include="Bin/3rdPartyNative.dll" ><Visible>false</Visible></Content>

Este es el objetivo BeforeBuild que funcionó para mí:

<Target Name="BeforeBuild"> <Message Text="Copy $(SolutionDir)Library/3rdPartyNative.dll to ''$(TargetDir)''3rdPartyNative.dll" Importance="high" /> <Copy SourceFiles="$(SolutionDir)Library/3rdPartyNative.dll" DestinationFiles="$(TargetDir)3rdPartyNative.dll" /> </Target>

Editado para incluir la sugerencia de @ tuespetre para ocultar la entrada, eliminando así la desventaja anterior de una carpeta bin visible. No verificado por mi