Author Topic: Using a name of the system variable in the referenced DLL of CSPROJ  (Read 2523 times)

0 Members and 1 Guest are viewing this topic.

Andrey Bushman

  • Swamp Rat
  • Posts: 864
Windows 7 x64, MS Visual Studio 2013 Premium.

I created a new system variable ObjectARX 2009 with the D:\SDK\Autodesk\AutoCAD\ObjectARX 2009 value. Windows Explorer opens right location for %ObjectARX 2009%. I want use this variable in my CSPOJ-file for the references:

Code - XML: [Select]
  1. <Reference Include="AcMgd">
  2.   <HintPath>$(ObjectARX 2009)\inc-x64\AcMgd.dll</HintPath>
  3.   <Private>False</Private>
  4. </Reference>
But Visual Studio doesn't see AcMgd.dll file.



File exists: .NET Reflector opens it for %ObjectARX 2009%\inc-x64\AcMgd.dll way.

If I use the full path, then it works fine:

Code - XML: [Select]
  1. <Reference Include="AcMgd">
  2.   <HintPath>D:\SDK\Autodesk\AutoCAD\ObjectARX 2009\inc-x64\AcMgd.dll</HintPath>
  3.   <Private>False</Private>
  4. </Reference>

Also, fine works such variant:

Code - XML: [Select]
  1. <PropertyGroup>
  2.   <ObjectARX_Location>D:\SDK\Autodesk\AutoCAD\ObjectARX 2009</ObjectARX_Location>
  3. </PropertyGroup>
  4.  
  5. <ItemGroup>
  6.   <Reference Include="AcMgd">
  7.     <HintPath>$(ObjectARX_Location)\inc-x64\AcMgd.dll</HintPath>
  8.     <Private>False</Private>
  9.   </Reference>
  10. </ItemGroup>

Why Visual Studio doesn't see my reference with the system variable?

BoxaShu

  • Mosquito
  • Posts: 1
Re: Using a name of the system variable in the referenced DLL of CSPROJ
« Reply #1 on: February 11, 2016, 01:18:22 AM »
I have a system variable also did not work, but with variable user environment, all at once turned.
[russian]
у меня с системной переменной также не работало, а вот с переменной среды пользователя, сразу все получилось.


Andrey Bushman

  • Swamp Rat
  • Posts: 864
Re: Using a name of the system variable in the referenced DLL of CSPROJ
« Reply #2 on: February 11, 2016, 05:18:38 AM »
[russian]
у меня с системной переменной также не работало, а вот с переменной среды пользователя, сразу все получилось.[/i]
[russian]
Я давно решил указанную мною проблему, но несколько иным способом. Сообщать в данной теме об ответе я не стал, т.к. кроме меня это никому не интересно. Мой способ решения я использовал, например, в проекте cadproxy. На этой страничке я разместил информацию, важную для программистов, которые захотят использовать исходный код моего проекта. В архиве common-settings-files.zip находится набор конфигурационных файлов, которые импортируются в проект. В них так же определён дополнительный набор переменных, нужных мне для работы. Этот вариант у меня прекрасно работает:
Code - XML: [Select]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- sdk.props
  3. UTF-8 encoding.
  4. © Andrey Bushman, 2015
  5. This file describes SDK locations of CAD systems. You are free to change its
  6. content according your SDK locations.
  7.  
  8. Three last versions of ObjectARX SDK you can download from the Autodesk official
  9. site: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=785550
  10. Older ObjectARX versions you can download from here: http://adn-cis.org/forum/index.php?topic=61.0 -->
  11. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  12.   <!-- SDK locations. -->
  13.   <PropertyGroup>
  14.     <!-- Parent directory for all SDKs (any software) -->
  15.     <SDK>\\hyprostr\dfs\groups\developers\sdk</SDK>
  16.     <!-- Parent directory for all ObjectARX SDKs -->
  17.     <ObjectARX>$(SDK)\Autodesk\AutoCAD</ObjectARX>
  18.     <!-- The ObjectARX SDK locations list -->
  19.     <ObjectARX_2009>$(ObjectARX)\ObjectARX 2009</ObjectARX_2009>
  20.     <ObjectARX_2010>$(ObjectARX)\ObjectARX 2010</ObjectARX_2010>
  21.     <ObjectARX_2011>$(ObjectARX)\ObjectARX 2011</ObjectARX_2011>
  22.     <ObjectARX_2012>$(ObjectARX)\ObjectARX 2012</ObjectARX_2012>
  23.     <ObjectARX_2013>$(ObjectARX)\ObjectARX 2013</ObjectARX_2013>
  24.     <ObjectARX_2014>$(ObjectARX)\ObjectARX 2014</ObjectARX_2014>
  25.     <ObjectARX_2015>$(ObjectARX)\ObjectARX 2015</ObjectARX_2015>
  26.     <ObjectARX_2016>$(ObjectARX)\ObjectARX 2016</ObjectARX_2016>
  27.     <!-- Add here new locations for ObjectARX of newer AutoCAD versions when
  28.    they appear. -->
  29.   </PropertyGroup>  
  30. </Project>
Возможно, что если в имени системной переменной Windows не использовать пробел и после её создания перегрузить компьютер, то всё будет работать и для неё. Сейчас точно не помню уже, но если мне не изменяет память, то такой вариант у меня тоже заработал.

UPD
Я проверил, на всякий случай. Да, в общих чертах я помню верно: если в имени переменной не использовать пробелы (или вместо пробелов использовать символ подчёркивания), то MSBuild в этом случае обрабатывает имя переменной корректно. При этом перезагрузка компьютера не нужна.

BoxaShu, в обозначенном тобой примере пробелы отсутствуют в имени переменной, т.о. ты скорее всего что-то не так сделал. Твой вариант должен работать и в случае использования системных переменных.
« Last Edit: February 11, 2016, 06:03:46 AM by Andrey Bushman »

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: Using a name of the system variable in the referenced DLL of CSPROJ
« Reply #3 on: February 11, 2016, 09:24:16 AM »
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst