In mijn dbproj faalt het instellen van "Kopieer altijd" of "Kopieer als nieuwer" op een bestand de build op de build-server

In VisualStudio 2010 hebben we een scenario waarbij een dbproj (B) verwijst naar een andere dbproj (A).

In dbproj (A), als ik de build-actie instelde op een van ons aangepaste SQL-script in de Scripts-map om "Altijd kopiëren" of "Kopiëren als nieuwer" de build mislukt (alleen op build-server) tijdens het bouwen van dbproj (B). Het probeert het bestand in (A) te kopiëren alsof het in (B) was.

Tijdens het bouwen van dbproj (A) is de uitvoer als volgt, wat goed is:

_CopyOutOfDateSourceItemsToOutputDirectory:
  Creating directory "D:\Builds\5\17\Binaries\Scripts".
  Copying file from "Scripts\FortressMainUpdate.sql" to "D:\Builds\5\17\Binaries\Scripts\FortressMainUpdate.sql".
  Copying file from "D:\Builds\5\17\Sources\Src\DataBase\MainDatabase\Scripts\FortressMainUpdate.sql" to "D:\Builds\5\17\Binaries\Scripts\FortressMainUpdate.sql".

En tijdens het bouwen van dbproj (B) geeft de server de volgende fouten weer:

_CopyOutOfDateSourceItemsToOutputDirectory:
Building target "_CopyOutOfDateSourceItemsToOutputDirectory" partially, because some output files are out of date with respect to their input files.
  Copying file from "Scripts\FortressOqtUpdate.sql" to "D:\Builds\5\17\Binaries\Scripts\FortressOqtUpdate.sql".
  Copying file from "D:\Builds\5\17\Sources\Src\DataBase\OpenQueryTool\Scripts\FortressMainUpdate.sql" to "D:\Builds\5\17\Binaries\Scripts\FortressMainUpdate.sql".
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(3129,9): error MSB3021: Unable to copy file "D:\Builds\5\17\Sources\Src\DataBase\OpenQueryTool\Scripts\FortressMainUpdate.sql" to "D:\Builds\5\17\Binaries\Scripts\FortressMainUpdate.sql". Could not find file **'D:\Builds\5\17\Sources\Src\DataBase\OpenQueryTool\Scripts\FortressMainUpdate.sql'**. [D:\Builds\5\17\Sources\Src\DataBase\OpenQueryTool\CCO.Fortress.Database.OpenQueryTool.dbproj]
  Copying file from "D:\Builds\5\17\Sources\Src\DataBase\OpenQueryTool\Scripts\FortressOqtUpdate.sql" to "D:\Builds\5\17\Binaries\Scripts\FortressOqtUpdate.sql".

Het bestand D: \ Builds \ 5 \ 17 \ Sources \ Src \ DataBase \ OpenQueryTool \ Scripts \ FortressMainUpdate.sql is degene die zich in dbproj (A) bevindt en nooit heeft bestaan ​​in \ DataBase \ OpenQueryTool \ Scripts \ .

Dit gebeurt alleen op de build-server. Als je lokaal bouwt, is alles in orde.

Ons doel is om die bestanden in de tfs-droplocatie te laten zetten, met het dbproj-gegenereerde sql-bestand, zodra de hele oplossing is gebouwd.

4
Als u MSBuild lokaal gebruikt op build server en VS2010, probeer het dan lokaal te bouwen met MSBuild.
toegevoegd de auteur Ludwo, de bron
@Ludwo Hetzelfde resultaat. Wat ik niet begrijp, is waarom de afhankelijkheid tussen beide projecten ervoor zorgt dat de build probeert het bestand te kopiëren van de verkeerde (vanuit mijn oogpunt) plaats.
toegevoegd de auteur Hugues Ferland, de bron
@Ludwo Om mijn probleem op te lossen, heb ik het bestand handmatig gekopieerd naar de map waarvan de build denkt dat het bestand zou moeten zijn en nu kopieert het bestand het bestand vanuit beide plaatsen (in ieder geval met behulp van MSBuild lokaal). Dus vanaf nu heb ik mijn oplossing. Bedankt.
toegevoegd de auteur Hugues Ferland, de bron

1 antwoord

De huidige oplossing is om het bestand naar de afhankelijke projectmap te kopiëren.

In mijn geval doe ik dat in de PreBuild-gebeurtenis van het hoofdproject - de hiërarchische afhankelijkheid van mappen tussen beide projecten kennen.

0
toegevoegd