c# - Programmatically force update Visual Studio Intellisense with evaluated MSBuild property value -


i'm trying create vsix extension adds drop-down menu visual studio toolbar control value of custom msbuild property. value determines version of comreference include in project , must set without overwriting .csproj file. part of .csproj file:

<project ... > <choose>     <when condition="'$(myproperty)'=='myvalue1'">       <itemgroup>         <comreference include="comlib">           version_1         </comreference>       </itemgroup>     </when>     <when condition="'$(myproperty)'=='myvalue2'">       <itemgroup>         <comreference include="comlib">           version_2         </comreference>       </itemgroup>     </when>   </choose> </project> 

i found 2 possible solutions:

first

public static void setglobalbuildproperty( string property, string value ) {     var projects = microsoft.build.evaluation.projectcollection                 .globalprojectcollection                 .loadedprojects;      foreach ( microsoft.build.evaluation.project project in projects )     {            project.setglobalproperty( property, value );         project.markdirty();         project.reevaluateifnecessary();         } } 

broject builds correctly actual value, intellisense not recognize comreferences intellisense functions not work , underlined in red.

second:

bring property separate file , include in main csproj. after modify .props file via vsix.

.csproj:

... <include project="generated\myprops.props"/> <coose> ... </choose> ... 

myprops:

<project ...>   <propertygroup>     <myproperty condition="'$(myproperty )' == ''">myvalue1</myproperty>     <defineconstants>$(defineconstants);$(myproperty)</defineconstants>   </propertygroup> </project> 

this solution works terribly. when change myvalue1, not enough reload project in solution explorer. it's not enough restart visual studio, , need delete .suo file.

how can intellisense update information project or maybe knows solution problem?

i found solution. function updates project , intellisense:

 vslangproj80.vsproject2.refresh(); 

full function (refresh projects in solution):

public static void setglobalbuildproperty( iserviceprovider package, string property, string value )     {         var projects = microsoft.build.evaluation.projectcollection             .globalprojectcollection             .loadedprojects;          foreach ( var project in projects )         {             project.setglobalproperty( property, value );             project.markdirty();             project.reevaluateifnecessary();                             }         var dte = package.getservice( typeof( dte ) ) dte2;         var solution = dte.solution solution2;         var dteprojects = getsolutionprojects( solution ) //get solution projects.         foreach( var project in dteprojects )         {             var vsproject = project.object vsproject2;             vsproject.refresh();         }                } 

Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -