Принудительная перезагрузка файла перед сборкой

StackOverflow https://stackoverflow.com/questions/2542865

  •  23-09-2019
  •  | 
  •  

Вопрос

У нас есть инструмент, который генерирует несколько файлов кода (.cs), которые используются для сборки проекта.

РЕДАКТИРОВАТЬ:Эти файлы являются второй половиной некоторых частичных классов, поэтому процесс сборки требует доступа к исходному коду.Например, невозможно скомпилировать его в DLL, а затем установить порядок сборки.

Инструмент запускается на этапе предварительной сборки, но файлы в решении обновляются только после сборки, а это означает, что сборку необходимо выполнить дважды, чтобы устранить ошибки после изменения входных данных.

Пример:

  • Изменить входной файл инструмента
  • Запустить сборку
    • Инструмент Запускает и изменяет исходный файл
  • Сборка не удалась
  • Запустить сборку
    • Инструмент Запускает и изменяет исходный файл (но на самом деле он не меняется, поскольку входные данные остаются прежними)
  • Сборка успешна

Есть идеи, как можно отказаться от двойной сборки и при этом позволить нашему инструменту запускаться из VS?

Спасибо ребята!

Это было полезно?

Решение 3

Ответ оказался: «Используйте Торт" и Powershell

Другие советы

Было бы тривиально написать макрос VS, который запускал бы ваш инструмент, а затем запускал сборку, чтобы вы могли выполнить весь процесс одним нажатием клавиши, быстрее, чем при двойной сборке.

В качестве альтернативы (или в сочетании с вышеизложенным) вы можете добавить в меню VS Tool собственный инструмент, который запускает ваш инструмент (см. Инструменты->Внешние инструменты).Затем просто вручную запустите этот специальный инструмент перед выполнением сборки — это все еще утомительный двойной шаг, но гораздо быстрее и проще, чем двойная сборка.(и вы, вероятно, сможете оставить свой инструмент включенным на этапе предварительной сборки, чтобы старый подход двойной сборки все еще работал).

Другой вариант может заключаться в редактировании сценария MSBuild для вашего проекта, чтобы он запускал ваш инструмент на более ранней стадии процесса сборки, чтобы изменения в файле были обнаружены во время сканирования зависимостей (поэтому требуется только один проход сборки).

Ни одно из этих решений не является отличным, но мы надеемся, что они могут дать вам пример, который обеспечит приемлемое улучшение вашей текущей ситуации.

реорганизовать ваш Soln на 2 проекта:первое поколение - это файл cs, второе использует его (как dll).

Первый проект (назовем его Gen) имеет два события после сборки:1, чтобы запустить инструмент и воссоздать исходный файл, и 2) скомпилировать исходный файл Gen'ed для использования вторым проектом:

Gen.exe 
csc.exe /target:library Gened.cs

Второй проект (назовем его Use) ссылается на dll и вызывает ее.

==Gen.cs

using System.IO;
namespace sm3
{class Gen
{static string bod = "public static int var = 46;";
 static string clas = "public class Gened {" + bod + "}";
 static string ns  = "namespace sm3 {" + clas + "}";
 static void Main(string[] args)
 {StreamWriter SW;
     SW = File.CreateText("Gened.cs");
     SW.WriteLine(ns);
     SW.Close();
    }}}

==Использовать.cs

using System;
namespace sm3
{class Use
    {static void Main(string[] args)
        {Gened g = new Gened();
         Console.Write(Gened.var.ToString());
         Console.ReadLine();
         }}}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top