Обновление ссылок проекта Visual Studio программно

Ну, да, это - то, что это делает. Я использую его для участников, которые изменяются методами, которые не делают логически , изменяют состояние класса - например, для ускорения поисков путем реализации кэша:

class CIniWrapper
{
public:
   CIniWrapper(LPCTSTR szIniFile);

   // non-const: logically modifies the state of the object
   void SetValue(LPCTSTR szName, LPCTSTR szValue);

   // const: does not logically change the object
   LPCTSTR GetValue(LPCTSTR szName, LPCTSTR szDefaultValue) const;

   // ...

private:
   // cache, avoids going to disk when a named value is retrieved multiple times
   // does not logically change the public interface, so declared mutable
   // so that it can be used by the const GetValue() method
   mutable std::map<string, string> m_mapNameToValue;
};

Теперь, необходимо использовать это с осторожностью - проблемами параллелизма является большое беспокойство, поскольку вызывающая сторона могла бы предположить, что они ориентированы на многопотоковое исполнение только с помощью const методы. И конечно, изменение mutable данные не должны изменять поведение объекта никаким значительным способом, что-то, что могло быть нарушено примером, который я дал, если, например, ожидалось, что изменения, записанные в диск, будут сразу видимы к приложению.

8
задан Cœur 21 January 2019 в 11:52
поделиться

2 ответа

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

Например,

<ItemGroup Condition="'$(IsRelease)'=='True'">
  <Reference Include="..." />
</ItemGroup>
<ItemGroup Condition="'$(IsRelease)'!='True'">
  <Reference Include="..." />
</ItemGroup>
10
ответ дан 5 December 2019 в 14:05
поделиться

Звучит как странная ситуация.

Мое предложение таково.

  1. Выделите проекты, у которых есть готовые версии, в отдельное решение. Сделайте так, чтобы все они были собраны в

    \ assembly \ fromsource

  2. . Скопируйте предварительно созданные в;

    \ assembly \ prebuilt

  3. Перед разработкой остальных проектов скопируйте любой каталог в

    \ assembly \ development

  4. Измените свои проекты так, чтобы они указывали на версии в \ assembly \ development.

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

Для получения бонусных очков измените событие предварительной сборки, чтобы скопировать библиотеки DLL, прежде чем что-то начнется, и исходная папка может различаться в зависимости от конфигурации. Затем добавьте конфигурацию PREBUILT вместе с DEBUG и RELEASE.

0
ответ дан 5 December 2019 в 14:05
поделиться