Мне нужно разрешить значения макросов решения / проекта, например, $ (ProjectDir) и $ (SolutionDir). Есть ли способ сделать это из расширения?
Насколько я знаю, ProjectDir
и SolutionDir
- это просто свойства MSBuild , и если вы хотите использовать $()
чтобы получить значения ProjectDir
и SolutionDir
, они могут быть распознаны только с помощью MSBuild tool , а не vsix api . Использование $
для получения значений свойств может использоваться только в MSBuild.
Чтобы получить значения $(ProjectDir)
и $(SolutionDir)
напрямую, я предлагаю вам просто использовать Интерфейс EnvDTE для получения значений, и его также можно использовать в VS2019.
Решение
1) попытаться сослаться на EnvDTE.dll
, существующее в C:\Program Files (x86)\Microsoft Visual Studio\2019\xxxx(Community/Professional/Enterprise)\Common7\IDE\PublicAssemblies
.
2) используя пространство имен using EnvDTE
;
3) добавить этот код в проект, который получит значения напрямую.
DTE dTE = Package.GetGlobalService(typeof(DTE)) as DTE;
string solutiondir = dTE.Solution.FileName; // the value of $(SolutionDir)
Project project = dTE.Solution.Projects.Item(1);
string projectdir = project.FileName; // the value of $(projectdir)
Результат равен значениям $ (ProjectDir) и $ (SolutionDir) в msbuild.