Wie kann ich verhindern, dass externe MSBuild-Dateien zwischengespeichert werden (von Visual Studio) während ein Projekt-build?
Habe ich ein Projekt in meiner Lösung, die begann sein Leben als ein C# - Klassenbibliothek-Projekt. Es hat nichts von Interesse in der es in Bezug auf den code, es wird lediglich verwendet, da Sie eine Abhängigkeit in der anderen Projekte in meiner Lösung, um sicherzustellen, dass es gebaut ersten. Eine der Nebenwirkungen der Gebäude in diesem Projekt ist, dass eine gemeinsame AssemblyInfo.cs erstellt, enthält Sie die Versionsnummer in der Nutzung von anderen Projekten.
Habe ich dies getan, indem Sie die folgenden die .csproj Datei:
<ItemGroup>
<None Include="Properties\AssemblyInfo.Shared.cs.in" />
<Compile Include="Properties\AssemblyInfo.Shared.cs" />
<None Include="VersionInfo.targets" />
</ItemGroup>
<Import Project="$(ProjectDir)VersionInfo.targets" />
<Target Name="BeforeBuild" DependsOnTargets="UpdateSharedAssemblyInfo" />
Die referenzierte Datei VersionInfo.Ziele, die Folgendes enthält:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!--
Some properties defining tool locations and the name of the
AssemblyInfo.Shared.cs.in file etc.
-->
</PropertyGroup>
<Target Name="UpdateSharedAssemblyInfo">
<!--
Uses the Exec task to run one of the tools to generate
AssemblyInfo.Shared.cs based on the location of AssemblyInfo.Shared.cs.in
and some of the other properties.
-->
</Target>
</Project>
Den Inhalt der VersionInfo.targets-Datei kann einfach eingebettet werden innerhalb der .csproj-Datei, aber es ist extern, weil ich bin versucht zu drehen, all dies in einer Projekt-Vorlage. Ich will, dass die Nutzer der Vorlage werden können, um das neue Projekt zu der Lösung, Bearbeiten Sie die VersionInfo.Ziele-Datei, und führen Sie den build.
Das problem ist, dass die änderung und speichern die VersionInfo.Ziele-Datei, und der Neuaufbau der Lösung keine Wirkung - die Projekt-Datei verwendet die Werte aus der .Ziele-Datei, wie Sie waren, wenn das Projekt geöffnet wurde. Auch das entladen und Neuladen hat das Projekt keine Auswirkungen. Um die neuen Werte, die ich brauche, um zu schließen Sie Visual Studio und öffnen Sie es (oder laden Sie die Lösung).
Wie kann ich diese einrichten, so dass die Konfiguration für externe .csproj-Datei und nicht zwischengespeichert zwischen builds?
- möglich, Duplikat der deaktivieren der Zwischenspeicherung von build Definitionen in Visual studio
- eine weitere mögliche Duplikate von: stackoverflow.com/questions/2012742/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe nur beantwortet, was zu sein scheint eine ähnliche Frage auf dieser.
Deaktivieren der Zwischenspeicherung von build Definitionen in Visual studio
Hoffentlich ist es relevant das Problem auch.
Soweit ich weiß, kann man nicht.
Visual Studio ist nicht mit 'echten' MSBuild, verwendet es eine interne build-engine, die verhält sich sehr ähnlich MSBuild.exe aber immer noch haben einige feine Unterschiede. Dieser build engine werden die Ziele, also muss man neu starten, VS einmal du etwas ändern. Ich glaube, es ist auch irgendwo dokumentiert, und es gibt keine bekannte Problemumgehung (ich suchte es über ein Jahr her und nichts gefunden).
Könnten Sie eventuell die Kraft der VS-reload-Ziele über den VS API - also, Sie haben zu erstellen (oder suchen) eine benutzerdefinierte add-on, dies zu tun.
Eine weitere option ist das etwas anderes als .targets-Datei zu speichern Sie Ihre Konfiguration. Zum Beispiel könnten Sie mit einem einfachen text-Datei und parse es mit MSBuild (nicht elegant, aber es sollte funktionieren).
Upd.
Genau das habe ich vor einiger Zeit. MSBuild Aufruf eines externen Programm via Exec mit WorkingDirectory="$(SolutionDir)" das tool "weiß, dass" alle Konventionen über Datei-Namen, Orte etc., so ein Arbeitsverzeichnis ist genug, um den job zu erledigen. Sonstiges Konfiguration werden die Daten in das externe tool config, also keine Probleme mit caching.
Außerdem haben Sie einen Blick auf diese Frage über das Lesen von Elementen aus einer Datei. Ich nehme an, dass eine bessere Suiten Ihre Bedürfnisse.
Hatte ich gelegentlich Erfolg durch ändern der Projektdatei einschließlich der benutzerdefinierten msbuild-Datei und machen es ungültig ist, dann Neuladen des Projekts, lass es bleiben ausgeladen, dann die Festsetzung der Projekt-Datei und laden.
Manchmal klappt es, manchmal nicht, aber besser als ein Neustart von Visual Studio.
Wenn Sie brauchen eine schnelle und schmutzige Art und Weise, es zu beheben, können Sie laden Sie einfach die Lösung (via https://stackoverflow.com/a/6877056/182371).
Können Sie dies entweder durch das schließen-öffnen Sie die Projektmappen-Datei oder durch drücken von ' Speichern in einem externen editor (wenn Sie dann zurückkommen, VS es wird asko, wenn Sie möchten, um neu zu laden).
.sln
Datei wurde aktualisiert auf CD), so dass auch nach dem neu laden, das problem besteht weiterhin.