Visual Studio С# не создает файлы, которые были изменены событием предварительной сборки

У меня есть решение в Visual Studio 2010 С#. В событии предварительной сборки я выполняю команду, которая изменяет файлы в этом решении. Обновленный файл не встроен в текущую сборку. Как сделать, чтобы файл с изменениями встраивался в текущую сборку???

Спасибо.


person user2717436    schedule 02.12.2013    source источник
comment
Откуда вы знаете, что файлы не созданы? какое у вас указание?   -  person Avi Turner    schedule 02.12.2013
comment
Можете ли вы предоставить некоторую информацию о том, что именно делается на этапе предварительной сборки? Я могу посмотреть через несколько часов и попытаться воспроизвести это   -  person Aleksei Poliakov    schedule 02.12.2013
comment
Большое спасибо заранее. то, что я пытаюсь сделать, это записать время сборки в один из файлов решения. чем при запуске приложения - нажатие на какую-либо кнопку извлечет эту информацию. скажите, пожалуйста, если я недостаточно ясно выразился, и еще раз спасибо.   -  person user2717436    schedule 02.12.2013
comment
это файл cs? если нет, то какой тип файла?   -  person Avi Turner    schedule 02.12.2013
comment
да, это файл cs (файлassemlyInfo)   -  person user2717436    schedule 02.12.2013


Ответы (1)


Хорошо, кажется, я понял вашу проблему.

Я настроил простое консольное приложение и это событие:

<PreBuildEvent>copy "D:\Program.cs" "D:\Projects\PreBuildFileModification\FileModification\Program.cs" /Y</PreBuildEvent>

И увы, это не работает! (происходит копирование и обновление файла на диске, но Visual Studio не обнаруживает эти изменения и загружает кешированный файл).

Решение состоит в том, чтобы добавить:

<UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>

В вашей конфигурации, например:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  <PlatformTarget>x86</PlatformTarget>
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

И теперь это работает как шарм.

Спасибо Робу Баттерворту

person Aleksei Poliakov    schedule 02.12.2013
comment
большое спасибо!! извините, что я не упомянул об этом раньше, но мое приложение - это приложение Silverlight. мой файл web.config не распознает тег PropertyGroup... У вас есть идеи? - person user2717436; 02.12.2013
comment
это не web.config, это файл .csproj. И PropertyGroup со всем, кроме <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>, уже должен быть на месте. Вам нужно добавить это для всех комбинаций платформ (x86, x64, AnyCPU и т. д.) и режимов (выпуск, отладка и т. д.), которые у вас есть. - person Aleksei Poliakov; 02.12.2013
comment
Мое решение содержит несколько проектов. Мне нужно сделать это для всех файлов .csproj или только для файла .csproj в основном проекте? - person user2717436; 03.12.2013
comment
Только для проектов, требующих изменения файлов в событии предварительной сборки. - person Aleksei Poliakov; 03.12.2013
comment
К сожалению, у меня это не сработало, работая с основным приложением asp .net. Я посмотрю, смогу ли я найти обходной путь. - person bnns; 06.08.2020
comment
@bnns Вы меняете файл .csproj? Если я изменяю файлы .cs, это работает. Если я изменю файл .csproj, произойдет сбой. - person leonardzheng; 17.08.2020