español argumentos c# msbuild

c# - argumentos - msbuild project



Problema en la compilación de construcción MSbuild: los pasos previos a la construcción primero o los proyectos dependientes primero (2)

Respuesta corta

Elimine su evento de compilación y agregue algo como lo siguiente a su proyecto (.csproj):

<Target Name="AfterResolveReferences"> <Exec Command="echo helloworld" /> </Target>

Más información

Puede leer sobre cómo personalizar el proceso de compilación aquí: http://msdn.microsoft.com/en-us/library/ms366724%28v=vs.110%29.aspx

El evento Before Build se activa antes de ResolveReferences, por lo tanto, si el proyecto al que hace referencia no se ha creado para el evento BeforeBuild de su proyecto, su evento BeforeBuild fallará.

Para superar esto, debe usar un punto de entrada diferente para personalizar el proceso de compilación. En el ejemplo anterior, utilizo AfterResolveReferences, ya que esto garantizará que todos los proyectos a los que hace referencia ya estén construidos.

Tengo un proyecto A que depende del proyecto B. El proyecto A tiene algunas tareas previas a la construcción que dependen de algunos archivos generados del proyecto B. Cuando compilo en Visual Studio, no hay problema. Pero cuando se usa MSBuild.exe, hay un problema porque el orden de compilación es:

  • Los pasos de compilación previa de A <- fallaron porque B no se compiló
  • B está compilado <- se espera que se ejecute primero
  • A está compilado

¿Es el comportamiento esperado con MSBuild? ¿Hay alguna manera de decirle a MSBuild que haga B primero antes de los pasos de preconstrucción?

Estoy usando VS2010 C # y C ++ / CLI. No creo que ofrezca información adicional, pero así es como se llama:

Running process (C:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBUILD.exe "../../../dev/build/MyProj.sln" /t:Clean /p:Configuration=Release;Platform=Win32)


La respuesta de Jack parece estar funcionando, pero lo que no me gustó es que la compatibilidad con la edición de .csproj no se admite nativamente en la interfaz de usuario de VS, aparte del incómodo "proyecto de descarga, proyecto de edición (durante el cual no se puede hacer clic en sus archivos como normalmente le gustaría), recargue el proyecto "modelo". Lo que quería era que el evento de precompilación se activara después de que se construyeran los proyectos dependientes, y que este trabajo sea el mismo en VS que en MSBuild. Después de luchar con este problema, encontré una solución que funciona para mí en MSBuild 4.0.

No importa lo que intenté, no pude alterar el objetivo PreBuildEvents para que se disparara después de que los proyectos dependientes terminaran de construirse. Entonces, lo que hice fue desactivar el objetivo PreBuildEvents y crear un objetivo PreBuildEvents personalizado bastardo que se ejecutaría en el momento apropiado:

<ItemGroup> <ProjectReference Include="../YourProjectPath/YourProject.csproj"> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference> </ItemGroup> <Target Name="PreBuildEvent" AfterTargets="" BeforeTargets="" /> <Target Name="BastardPreBuildEvent" AfterTargets="ResolveReferences" BeforeTargets="CoreResGen"> <Exec Command="$(PreBuildEvent)" /> </Target>