prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [question] How to not include some libs in conanbuildinfo.props
  Conan version 1.19.0
  
  I have a dependency on boost (boost/1.71.0@conan/stable).
  
  I'm using the visual_studio generator with VS2017
  
  This adds *all* of the boost libs to conanbuildinfo.props which causes my build to fail.  I don't completely understand why this used to be OK with 1.68 and now fails with that too after moving my cache to a different drive (perhaps it was due to installing vs2019 alongside vs2017). 
  
  But regardless it would be good if I could either cherrypick which libs to include or remove specific ones from the list.
  
  For example I don't want to include any of the stacktrace libs which result in duplicate symbols.
  
  I can't figure out how to do it.  If I specify any of the 'without_xxx' options then it rebuilds the whole of the boost dependency which I would rather avoid - I just want to control which libs it puts in the vs props file!
  
  I was trying to see if there was some place I could remove them from deps_cpp_info but it doesn't look like there is a place to put that (i.e. an event just before the generators are run).
  
  Perhaps overriding the generator could do the trick but it seems like that would be a bit of a sledgehammer and not all that clean.
  
  
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `conans/client/generators/visualstudio.py`
  Content:
  ```
  1 import os
  2 import re
  3 
  4 from conans.model import Generator
  5 from conans.paths import BUILD_INFO_VISUAL_STUDIO
  6 from conans.client.tools.files import VALID_LIB_EXTENSIONS
  7 
  8 
  9 class VisualStudioGenerator(Generator):
  10 
  11     template = '''<?xml version="1.0" encoding="utf-8"?>
  12 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  13   <ImportGroup Label="PropertySheets" />
  14   <PropertyGroup Label="UserMacros" />
  15   <PropertyGroup Label="Conan-RootDirs">{item_properties}
  16   </PropertyGroup>
  17   {properties}
  18   <ItemGroup />
  19 </Project>'''
  20 
  21     properties_template = '''  <PropertyGroup Label="ConanVariables"{condition}>
  22     <ConanCompilerFlags>{compiler_flags}</ConanCompilerFlags>
  23     <ConanPreprocessorDefinitions>{definitions}</ConanPreprocessorDefinitions>
  24     <ConanIncludeDirectories>{include_dirs}</ConanIncludeDirectories>
  25     <ConanResourceDirectories>{res_dirs}</ConanResourceDirectories>
  26     <ConanLibraryDirectories>{lib_dirs}</ConanLibraryDirectories>
  27     <ConanBinaryDirectories>{bin_dirs}</ConanBinaryDirectories>
  28   </PropertyGroup>
  29   <PropertyGroup{condition}>
  30     <LocalDebuggerEnvironment>PATH=%PATH%;{bin_dirs}</LocalDebuggerEnvironment>
  31     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  32   </PropertyGroup>
  33   <ItemDefinitionGroup{condition}>
  34     <ClCompile>
  35       <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
  36       <PreprocessorDefinitions>$(ConanPreprocessorDefinitions)%(PreprocessorDefinitions)</PreprocessorDefinitions>
  37       <AdditionalOptions>$(ConanCompilerFlags) %(AdditionalOptions)</AdditionalOptions>
  38     </ClCompile>
  39     <Link>
  40       <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
  41       <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>
  42       <AdditionalOptions>{linker_flags} %(AdditionalOptions)</AdditionalOptions>
  43     </Link>
  44     <Lib>
  45       <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
  46       <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>
  47     </Lib>
  48     <Midl>
  49       <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
  50     </Midl>
  51     <ResourceCompile>
  52       <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
  53       <PreprocessorDefinitions>$(ConanPreprocessorDefinitions)%(PreprocessorDefinitions)</PreprocessorDefinitions>
  54       <AdditionalOptions>$(ConanCompilerFlags) %(AdditionalOptions)</AdditionalOptions>
  55     </ResourceCompile>
  56   </ItemDefinitionGroup>'''
  57 
  58     item_template = '''
  59     <Conan-{name}-Root>{root_dir}</Conan-{name}-Root>'''
  60 
  61     def _format_items(self):
  62         sections = []
  63         for dep_name, cpp_info in self._deps_build_info.dependencies:
  64             fields = {
  65                 'root_dir': cpp_info.rootpath,
  66                 'name': dep_name.replace(".", "-")
  67             }
  68             section = self.item_template.format(**fields)
  69             sections.append(section)
  70         return "".join(sections)
  71 
  72     @property
  73     def filename(self):
  74         return BUILD_INFO_VISUAL_STUDIO
  75 
  76     def _format_properties(self, build_info, condition):
  77         def has_valid_ext(lib):
  78             ext = os.path.splitext(lib)[1]
  79             return ext in VALID_LIB_EXTENSIONS
  80 
  81         fields = {
  82             'condition': condition,
  83             'bin_dirs': "".join("%s;" % p for p in build_info.bin_paths),
  84             'res_dirs': "".join("%s;" % p for p in build_info.res_paths),
  85             'include_dirs': "".join("%s;" % p for p in build_info.include_paths),
  86             'lib_dirs': "".join("%s;" % p for p in build_info.lib_paths),
  87             'libs': "".join(['%s.lib;' % lib if not has_valid_ext(lib)
  88                              else '%s;' % lib for lib in build_info.libs]),
  89             'definitions': "".join("%s;" % d for d in build_info.defines),
  90             'compiler_flags': " ".join(build_info.cxxflags + build_info.cflags),
  91             'linker_flags': " ".join(build_info.sharedlinkflags),
  92             'exe_flags': " ".join(build_info.exelinkflags)
  93         }
  94         formatted_template = self.properties_template.format(**fields)
  95         return formatted_template
  96 
  97     @property
  98     def content(self):
  99         per_item_props = self._format_items()
  100 
  101         properties = [self._format_properties(self._deps_build_info, condition='')]
  102         for config, cpp_info in self._deps_build_info.configs.items():
  103             condition = " Condition=\"'$(Configuration)' == '%s'\"" % config
  104             properties.append(self._format_properties(cpp_info, condition=condition))
  105 
  106         fields = {
  107             'item_properties': per_item_props,
  108             'properties': '\n'.join(properties)
  109         }
  110         formatted_template = self.template.format(**fields)
  111 
  112         userprofile = os.getenv("USERPROFILE")
  113         if userprofile:
  114             userprofile = userprofile.replace("\\", "\\\\")
  115             formatted_template = re.sub(userprofile, "$(USERPROFILE)", formatted_template,
  116                                         flags=re.I)
  117         return formatted_template
  118
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/conans/client/generators/visualstudio.py b/conans/client/generators/visualstudio.py
  --- a/conans/client/generators/visualstudio.py
  +++ b/conans/client/generators/visualstudio.py
  @@ -18,13 +18,15 @@
     <ItemGroup />
   </Project>'''
   
  -    properties_template = '''  <PropertyGroup Label="ConanVariables"{condition}>
  +    properties_template = '''<PropertyGroup Label="ConanVariables"{condition}>
       <ConanCompilerFlags>{compiler_flags}</ConanCompilerFlags>
  +    <ConanLinkerFlags>{linker_flags}</ConanLinkerFlags>
       <ConanPreprocessorDefinitions>{definitions}</ConanPreprocessorDefinitions>
       <ConanIncludeDirectories>{include_dirs}</ConanIncludeDirectories>
       <ConanResourceDirectories>{res_dirs}</ConanResourceDirectories>
       <ConanLibraryDirectories>{lib_dirs}</ConanLibraryDirectories>
       <ConanBinaryDirectories>{bin_dirs}</ConanBinaryDirectories>
  +    <ConanLibraries>{libs}</ConanLibraries>
     </PropertyGroup>
     <PropertyGroup{condition}>
       <LocalDebuggerEnvironment>PATH=%PATH%;{bin_dirs}</LocalDebuggerEnvironment>
  @@ -38,13 +40,9 @@
       </ClCompile>
       <Link>
         <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
  -      <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>
  -      <AdditionalOptions>{linker_flags} %(AdditionalOptions)</AdditionalOptions>
  +      <AdditionalDependencies>$(ConanLibraries)%(AdditionalDependencies)</AdditionalDependencies>
  +      <AdditionalOptions>$(ConanLinkerFlags) %(AdditionalOptions)</AdditionalOptions>
       </Link>
  -    <Lib>
  -      <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
  -      <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>
  -    </Lib>
       <Midl>
         <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       </Midl>
  
verification_info: {"golden_diff": "diff --git a/conans/client/generators/visualstudio.py b/conans/client/generators/visualstudio.py\n--- a/conans/client/generators/visualstudio.py\n+++ b/conans/client/generators/visualstudio.py\n@@ -18,13 +18,15 @@\n   <ItemGroup />\n </Project>'''\n \n-    properties_template = '''  <PropertyGroup Label=\"ConanVariables\"{condition}>\n+    properties_template = '''<PropertyGroup Label=\"ConanVariables\"{condition}>\n     <ConanCompilerFlags>{compiler_flags}</ConanCompilerFlags>\n+    <ConanLinkerFlags>{linker_flags}</ConanLinkerFlags>\n     <ConanPreprocessorDefinitions>{definitions}</ConanPreprocessorDefinitions>\n     <ConanIncludeDirectories>{include_dirs}</ConanIncludeDirectories>\n     <ConanResourceDirectories>{res_dirs}</ConanResourceDirectories>\n     <ConanLibraryDirectories>{lib_dirs}</ConanLibraryDirectories>\n     <ConanBinaryDirectories>{bin_dirs}</ConanBinaryDirectories>\n+    <ConanLibraries>{libs}</ConanLibraries>\n   </PropertyGroup>\n   <PropertyGroup{condition}>\n     <LocalDebuggerEnvironment>PATH=%PATH%;{bin_dirs}</LocalDebuggerEnvironment>\n@@ -38,13 +40,9 @@\n     </ClCompile>\n     <Link>\n       <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n-      <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>\n-      <AdditionalOptions>{linker_flags} %(AdditionalOptions)</AdditionalOptions>\n+      <AdditionalDependencies>$(ConanLibraries)%(AdditionalDependencies)</AdditionalDependencies>\n+      <AdditionalOptions>$(ConanLinkerFlags) %(AdditionalOptions)</AdditionalOptions>\n     </Link>\n-    <Lib>\n-      <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n-      <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>\n-    </Lib>\n     <Midl>\n       <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n     </Midl>\n", "issue": "[question] How to not include some libs in conanbuildinfo.props\nConan version 1.19.0\r\n\r\nI have a dependency on boost (boost/1.71.0@conan/stable).\r\n\r\nI'm using the visual_studio generator with VS2017\r\n\r\nThis adds *all* of the boost libs to conanbuildinfo.props which causes my build to fail.  I don't completely understand why this used to be OK with 1.68 and now fails with that too after moving my cache to a different drive (perhaps it was due to installing vs2019 alongside vs2017). \r\n\r\nBut regardless it would be good if I could either cherrypick which libs to include or remove specific ones from the list.\r\n\r\nFor example I don't want to include any of the stacktrace libs which result in duplicate symbols.\r\n\r\nI can't figure out how to do it.  If I specify any of the 'without_xxx' options then it rebuilds the whole of the boost dependency which I would rather avoid - I just want to control which libs it puts in the vs props file!\r\n\r\nI was trying to see if there was some place I could remove them from deps_cpp_info but it doesn't look like there is a place to put that (i.e. an event just before the generators are run).\r\n\r\nPerhaps overriding the generator could do the trick but it seems like that would be a bit of a sledgehammer and not all that clean.\r\n\r\n\r\n\n", "before_files": [{"content": "import os\nimport re\n\nfrom conans.model import Generator\nfrom conans.paths import BUILD_INFO_VISUAL_STUDIO\nfrom conans.client.tools.files import VALID_LIB_EXTENSIONS\n\n\nclass VisualStudioGenerator(Generator):\n\n    template = '''<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Label=\"Conan-RootDirs\">{item_properties}\n  </PropertyGroup>\n  {properties}\n  <ItemGroup />\n</Project>'''\n\n    properties_template = '''  <PropertyGroup Label=\"ConanVariables\"{condition}>\n    <ConanCompilerFlags>{compiler_flags}</ConanCompilerFlags>\n    <ConanPreprocessorDefinitions>{definitions}</ConanPreprocessorDefinitions>\n    <ConanIncludeDirectories>{include_dirs}</ConanIncludeDirectories>\n    <ConanResourceDirectories>{res_dirs}</ConanResourceDirectories>\n    <ConanLibraryDirectories>{lib_dirs}</ConanLibraryDirectories>\n    <ConanBinaryDirectories>{bin_dirs}</ConanBinaryDirectories>\n  </PropertyGroup>\n  <PropertyGroup{condition}>\n    <LocalDebuggerEnvironment>PATH=%PATH%;{bin_dirs}</LocalDebuggerEnvironment>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n  </PropertyGroup>\n  <ItemDefinitionGroup{condition}>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>$(ConanPreprocessorDefinitions)%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalOptions>$(ConanCompilerFlags) %(AdditionalOptions)</AdditionalOptions>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalOptions>{linker_flags} %(AdditionalOptions)</AdditionalOptions>\n    </Link>\n    <Lib>\n      <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>{libs}%(AdditionalDependencies)</AdditionalDependencies>\n    </Lib>\n    <Midl>\n      <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </Midl>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>$(ConanPreprocessorDefinitions)%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalOptions>$(ConanCompilerFlags) %(AdditionalOptions)</AdditionalOptions>\n    </ResourceCompile>\n  </ItemDefinitionGroup>'''\n\n    item_template = '''\n    <Conan-{name}-Root>{root_dir}</Conan-{name}-Root>'''\n\n    def _format_items(self):\n        sections = []\n        for dep_name, cpp_info in self._deps_build_info.dependencies:\n            fields = {\n                'root_dir': cpp_info.rootpath,\n                'name': dep_name.replace(\".\", \"-\")\n            }\n            section = self.item_template.format(**fields)\n            sections.append(section)\n        return \"\".join(sections)\n\n    @property\n    def filename(self):\n        return BUILD_INFO_VISUAL_STUDIO\n\n    def _format_properties(self, build_info, condition):\n        def has_valid_ext(lib):\n            ext = os.path.splitext(lib)[1]\n            return ext in VALID_LIB_EXTENSIONS\n\n        fields = {\n            'condition': condition,\n            'bin_dirs': \"\".join(\"%s;\" % p for p in build_info.bin_paths),\n            'res_dirs': \"\".join(\"%s;\" % p for p in build_info.res_paths),\n            'include_dirs': \"\".join(\"%s;\" % p for p in build_info.include_paths),\n            'lib_dirs': \"\".join(\"%s;\" % p for p in build_info.lib_paths),\n            'libs': \"\".join(['%s.lib;' % lib if not has_valid_ext(lib)\n                             else '%s;' % lib for lib in build_info.libs]),\n            'definitions': \"\".join(\"%s;\" % d for d in build_info.defines),\n            'compiler_flags': \" \".join(build_info.cxxflags + build_info.cflags),\n            'linker_flags': \" \".join(build_info.sharedlinkflags),\n            'exe_flags': \" \".join(build_info.exelinkflags)\n        }\n        formatted_template = self.properties_template.format(**fields)\n        return formatted_template\n\n    @property\n    def content(self):\n        per_item_props = self._format_items()\n\n        properties = [self._format_properties(self._deps_build_info, condition='')]\n        for config, cpp_info in self._deps_build_info.configs.items():\n            condition = \" Condition=\\\"'$(Configuration)' == '%s'\\\"\" % config\n            properties.append(self._format_properties(cpp_info, condition=condition))\n\n        fields = {\n            'item_properties': per_item_props,\n            'properties': '\\n'.join(properties)\n        }\n        formatted_template = self.template.format(**fields)\n\n        userprofile = os.getenv(\"USERPROFILE\")\n        if userprofile:\n            userprofile = userprofile.replace(\"\\\\\", \"\\\\\\\\\")\n            formatted_template = re.sub(userprofile, \"$(USERPROFILE)\", formatted_template,\n                                        flags=re.I)\n        return formatted_template\n", "path": "conans/client/generators/visualstudio.py"}], "after_files": [{"content": "import os\nimport re\n\nfrom conans.model import Generator\nfrom conans.paths import BUILD_INFO_VISUAL_STUDIO\nfrom conans.client.tools.files import VALID_LIB_EXTENSIONS\n\n\nclass VisualStudioGenerator(Generator):\n\n    template = '''<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Label=\"Conan-RootDirs\">{item_properties}\n  </PropertyGroup>\n  {properties}\n  <ItemGroup />\n</Project>'''\n\n    properties_template = '''<PropertyGroup Label=\"ConanVariables\"{condition}>\n    <ConanCompilerFlags>{compiler_flags}</ConanCompilerFlags>\n    <ConanLinkerFlags>{linker_flags}</ConanLinkerFlags>\n    <ConanPreprocessorDefinitions>{definitions}</ConanPreprocessorDefinitions>\n    <ConanIncludeDirectories>{include_dirs}</ConanIncludeDirectories>\n    <ConanResourceDirectories>{res_dirs}</ConanResourceDirectories>\n    <ConanLibraryDirectories>{lib_dirs}</ConanLibraryDirectories>\n    <ConanBinaryDirectories>{bin_dirs}</ConanBinaryDirectories>\n    <ConanLibraries>{libs}</ConanLibraries>\n  </PropertyGroup>\n  <PropertyGroup{condition}>\n    <LocalDebuggerEnvironment>PATH=%PATH%;{bin_dirs}</LocalDebuggerEnvironment>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n  </PropertyGroup>\n  <ItemDefinitionGroup{condition}>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>$(ConanPreprocessorDefinitions)%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalOptions>$(ConanCompilerFlags) %(AdditionalOptions)</AdditionalOptions>\n    </ClCompile>\n    <Link>\n      <AdditionalLibraryDirectories>$(ConanLibraryDirectories)%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n      <AdditionalDependencies>$(ConanLibraries)%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalOptions>$(ConanLinkerFlags) %(AdditionalOptions)</AdditionalOptions>\n    </Link>\n    <Midl>\n      <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </Midl>\n    <ResourceCompile>\n      <AdditionalIncludeDirectories>$(ConanIncludeDirectories)%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>$(ConanPreprocessorDefinitions)%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalOptions>$(ConanCompilerFlags) %(AdditionalOptions)</AdditionalOptions>\n    </ResourceCompile>\n  </ItemDefinitionGroup>'''\n\n    item_template = '''\n    <Conan-{name}-Root>{root_dir}</Conan-{name}-Root>'''\n\n    def _format_items(self):\n        sections = []\n        for dep_name, cpp_info in self._deps_build_info.dependencies:\n            fields = {\n                'root_dir': cpp_info.rootpath,\n                'name': dep_name.replace(\".\", \"-\")\n            }\n            section = self.item_template.format(**fields)\n            sections.append(section)\n        return \"\".join(sections)\n\n    @property\n    def filename(self):\n        return BUILD_INFO_VISUAL_STUDIO\n\n    def _format_properties(self, build_info, condition):\n        def has_valid_ext(lib):\n            ext = os.path.splitext(lib)[1]\n            return ext in VALID_LIB_EXTENSIONS\n\n        fields = {\n            'condition': condition,\n            'bin_dirs': \"\".join(\"%s;\" % p for p in build_info.bin_paths),\n            'res_dirs': \"\".join(\"%s;\" % p for p in build_info.res_paths),\n            'include_dirs': \"\".join(\"%s;\" % p for p in build_info.include_paths),\n            'lib_dirs': \"\".join(\"%s;\" % p for p in build_info.lib_paths),\n            'libs': \"\".join(['%s.lib;' % lib if not has_valid_ext(lib)\n                             else '%s;' % lib for lib in build_info.libs]),\n            'definitions': \"\".join(\"%s;\" % d for d in build_info.defines),\n            'compiler_flags': \" \".join(build_info.cxxflags + build_info.cflags),\n            'linker_flags': \" \".join(build_info.sharedlinkflags),\n            'exe_flags': \" \".join(build_info.exelinkflags)\n        }\n        formatted_template = self.properties_template.format(**fields)\n        return formatted_template\n\n    @property\n    def content(self):\n        per_item_props = self._format_items()\n\n        properties = [self._format_properties(self._deps_build_info, condition='')]\n        for config, cpp_info in self._deps_build_info.configs.items():\n            condition = \" Condition=\\\"'$(Configuration)' == '%s'\\\"\" % config\n            properties.append(self._format_properties(cpp_info, condition=condition))\n\n        fields = {\n            'item_properties': per_item_props,\n            'properties': '\\n'.join(properties)\n        }\n        formatted_template = self.template.format(**fields)\n\n        userprofile = os.getenv(\"USERPROFILE\")\n        if userprofile:\n            userprofile = userprofile.replace(\"\\\\\", \"\\\\\\\\\")\n            formatted_template = re.sub(userprofile, \"$(USERPROFILE)\", formatted_template,\n                                        flags=re.I)\n        return formatted_template\n", "path": "conans/client/generators/visualstudio.py"}]}