Как переместить ссылочные библиотеки DLL с отладкой / выпуском в VSCode? - PullRequest
0 голосов
/ 24 мая 2019

Настройка

Я преобразовал проект консольного приложения C # VS2015 в VSCode, и я пытаюсь добавить ссылку на DLL и переместить все библиотеки DLL, на которые есть ссылки, при сборке.

Для начала Dotnet add package не сработало, с ошибкой The project does not support adding package references through the add package command., поэтому я добавил проект вручную в файл .csproj. Пакет, который я хочу добавить, является локальной версией, расположенной по адресу ./Lib/AutoItX

Lib/
   └── AutoItX
        ├── AutoItX3_x64.dll
        ├── AutoItX3.Assembly.dll
        ├── AutoItX3.Assembly.xml
        └── AutoItX3.dll

дополнений к .csprog

<ItemGroup>
    <Reference Include="AutoItX">
      <HintPath>.\Lib\AutoItX\AutoItX3.Assembly.dll</HintPath>
    </Reference>
  </ItemGroup>

Ссылка работает, и если я вручную перемещаю DLL в папку Debug, он находит ее, и все в порядке.

Вопрос

Есть ли способ автоматизировать перемещение DLL в папку?

в настоящее время, после нового запуска, моя папка отладки выглядит следующим образом:

bin/
   └── x64
        └── Debug
            ├── AutoItX3.Assembly.dll
            ├── AutoItX3.Assembly.xml
            ├── Application.exe
            ├── Application.exe.config
            └── Application.pdb

Мне бы хотелось, чтобы AutoItX3_x64.dll автоматически включался в сборки x64, и, если возможно, AutoIt3.dll включался в сборки x86 (в настоящее время он не настроен для сборок x86, я просто хочу знать, как)

Дополнительная информация

мой launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "clr",
            "request": "launch",
            "preLaunchTask": "compile",
            "program": "${workspaceFolder}/Application/bin/x64/Debug/StartApplication.exe",
            "args": ["./Download/start.json"],
            "cwd": "${workspaceFolder}",
            "console": "externalTerminal",
            "stopAtEntry": false
        },
        {
            "name": ".NET Core Attach",
            "type": "clr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

мой tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "compile",
            "type": "shell",
            "command": "dotnet",
            "args": [
                // Ask msbuild to generate full paths for file names.
                "msbuild",
                "Application.sln",
                "/property:GenerateFullPaths=true",
                "/property:Platform=x64"
            ],
            "group": "build",
            "presentation": {
                // Reveal the output only if unrecognized errors occur.
                "reveal": "silent"
            },
            // Use the standard MS compiler pattern to detect errors, warnings and infos
            "problemMatcher": "$msCompile"
        }
    ]
}

Application.sln


Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Application", "Application\Application.csproj", "{E9AA3396-3EAD-47EE-9927-F20D87B34BF6}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Debug|x86 = Debug|x86
        Debug|x64 = Debug|x64
        Release|Any CPU = Release|Any CPU
        Release|x86 = Release|x86
        Release|x64 = Release|x64
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Debug|x86.ActiveCfg = Debug|x86
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Debug|x86.Build.0 = Debug|x86
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Debug|x64.ActiveCfg = Debug|x64
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Debug|x64.Build.0 = Debug|x64
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Release|Any CPU.Build.0 = Release|Any CPU
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Release|x86.ActiveCfg = Release|x86
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Release|x86.Build.0 = Release|x86
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Release|x64.ActiveCfg = Release|x64
        {E9AA3396-3EAD-47EE-9927-F20D87B34BF6}.Release|x64.Build.0 = Release|x64
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal

Что я знаю и что я пробовал

Документы Microsoft показывают, что вы можете использовать метатег <DependentUpon>, который я безуспешно пытался.
В документах также упоминаются условия , которые используются в программном обеспечении .csproj, что заставляет меня думать, что, как только у меня будет одна работающая конфигурация, я могу создать условие, чтобы она работала на обеих платформах.
Еще одна вещь, которая может решить эту конкретную проблему, это tasks , но это выглядит очень грубо, и я бы не знал, как проанализировать .csproj для всех внешних, локальных DLL двигаться.

1 Ответ

0 голосов
/ 24 мая 2019

этот пост был действительно полезен при объяснении, как связывать контент.

<ItemGroup>
  <Content Include="..\Shared\SharedSettings.json" Link="SharedSettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

Используя условия из связанной документации в вопросе , я былвозможность перемещать библиотеки DLL для x86 и x64 соответственно.

Это было окончательное решение для .csproj

<ItemGroup>
    <Reference Include="AutoItX">
      <HintPath>$(ProjectDir)\Lib\AutoItX\AutoItX3.Assembly.dll</HintPath>
    </Reference>
    <Content Include="$(ProjectDir)\Lib\AutoItX\AutoItX3_x64.dll" Condition="'$(Platform)' == 'x64'" Link="AutoItX3_x64.dll" CopyToOutputDirectory="PreserveNewest" />
    <Content Include="$(ProjectDir)\Lib\AutoItX\AutoItX3.dll" Condition="'$(Platform)' == 'x86'" Link="AutoItX3.dll" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...