3

J'essaie de faire une extension pour VisualStudio 2017.

Actuellement, je ne trouve pas un moyen de traduire $ (XXX) (par exemple $ (SolutionDir) ou $ (TargetName)) par programmation en utilisant C# et Visual.VCProject API.

EnvDTE.Project project = (EnvDTE.Project)selectedProjects.GetValue(0); 
var vcproj = project.Object as VCProject; 
VCConfiguration cfg = (VCConfiguration)vcproj.ActiveConfiguration; 
VCDebugSettings debug = (VCDebugSettings)cfg.DebugSettings; 

string path = debug.WorkingDirectory; 
// Here path is $(ProjectDir) But I need something like c:\myProject 
// Resolution can be done because Visual can do: my question is : How ? 

Avez-vous des idées pour le faire?

Références & doc:

https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.vcconfiguration.debugsettings.aspx

EDIT: Après quelques recherches

je l'ai trouvé un peu expliquer dans le document d'environ $()

https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-reference-the-name-or-location-of-the-project-file

Peut-être répondre est dans cette partie de doc?

https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage(v=vs.140).aspx

https://docs.microsoft.com/fr-fr/visualstudio/extensibility/internals/persisting-data-in-the-msbuild-project-file

https://docs.microsoft.com/fr-fr/visualstudio/extensibility/internals/using-msbuild

Répondre

1

Utilisez VCConfiguration.Evaluate pour valoriser la valeur d'un modèle de projet ou de l'environnement macro

EnvDTE.Project project = (EnvDTE.Project)selectedProjects.GetValue(0); 
var vcproj = project.Object as VCProject; 
VCConfiguration cfg = (VCConfiguration)vcproj.ActiveConfiguration; 
VCDebugSettings debug = (VCDebugSettings)cfg.DebugSettings; 

//string path = debug.WorkingDirectory; 
string path = cfg.Evaluate(debug.WorkingDirectory); 

// Here path is $(ProjectDir) But I need something like c:\myProject 
// Resolution can be done because Visual can do: my question is : How ?