VSCode c#如何添加自定义程序集的引用

22

我想在Visual Studio Code中添加对自定义C#程序集的引用,比如

"../libs/mylib.dll"

该如何添加这个依赖项呢?

我试图添加该依赖项的路径,但由于路径错误而无法编译 :)

"dependencies": {
    "myassembly" : "../libs/Common.dll"
  },
或者
"dependencies": {
    "log4net" : { "assembly":"../libs/log4net.dll" }
  },

1
你需要提供更多信息,这应该对你来说是显而易见的。你正在处理什么样的项目?你如何尝试从你的代码中使用自定义程序集?为什么不能按照常规方式引用它,通过向你的项目添加引用?你做了哪些研究? - rory.ap
1
我原以为这是一个简单的问题。我有一个包含program.cs文件的HelloWorld项目。在这个cs文件中,我想使用另一个程序集中的类。我的问题是:如何告诉vscode加载我的自定义程序集。当你说“你为什么不能引用它…”时,这正是我试图做但不知道如何实现的。 - Tobias Koller
为什么这么生气?当然我用谷歌搜索了,但是没有找到一个关于那个问题的答案。我花了大约1小时来搜索这个问题...我找到了一些StackOverflow的帖子,但都不是我要找的答案。 - Tobias Koller
大家注意 - @Tobias 已将此标记为 Visual Studio Code 而不是普通的 VS。 - garfbradaz
@TobiasKoller:请问您能否添加到project.json中您添加的内容。 - garfbradaz
显示剩余4条评论
4个回答

40

更简单的做法,只需添加以下内容:

1)修改myproject.csproj文件

    <ItemGroup>
     <Reference Include="DllComunVb2008">
       <HintPath>..\Dlls\DllComunVb2008.dll</HintPath>
     </Reference>
    </ItemGroup>

2) 添加你将要使用的库的 using。例如:using Dllcomun;


感谢您的回答,但是根据stackoverflow的规定,所有帖子都必须用英语发布。 - user5226582

7
我终于找到了一种在Visual Studio Code中引用任何.net程序集的方法。
首先需要注意:我只需要vscode来进行智能感知,我不会在vscode/.netcore中编译程序集。当我的编码完成后,我将使用命令行工具生成我的程序集。
这是我的解决方案:
1. 使用Visual Studio(而不是Code)创建一个常规的.net类库。这将创建一个myproject.csproj文件(可以被vscode读取)。或者使用我在本帖底部的test.csproj文件。 2. 创建一个用于引用程序集的文件夹。我只是在顶级目录下创建了一个libs目录。 3. 关闭VS并使用VS Code打开文件夹。 4. 修改*.csproj文件如下:
注意:我们以调试模式创建了项目,因此可以删除Release-PropertyGroup:
4.2. 删除Release-PropertyGroup(你不必这样做,但你不需要它)
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

修改bin-output-path为libs目录

<OutputPath>bin\Debug\</OutputPath>

为了

<OutputPath>libs</OutputPath>

将你的引用 .net 程序集(外部或自定义)放在 libs 目录中,并像下面这样引用它们:
...
</PropertyGroup>
  <ItemGroup>
    <Reference Include="log4net">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>log4net.dll</HintPath>
    </Reference>
    ...
  </ItemGroup>
...

这是完整的*.csproj文件,其中引用了log4net.dll。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{75278D05-4850-4282-8AB4-3643A9E799FF}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Test</RootNamespace>
    <AssemblyName>Test</AssemblyName>
    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>libs</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="log4net">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>log4net.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Runtime.Serialization" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="myassembly.cs" />
  </ItemGroup>
  <ItemGroup>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

1
随着微软对MSBuild进行改进(在VS2017中即将发布),您很快就会看到更简单的csproj格式,其中添加引用(甚至是NuGet包)变得更加容易。这应该会对VSCode用户有很大帮助。目前,您必须接受这些限制。 - Lex Li

1
我使用dotnet创建了一个项目,然后使用Visual Studio 2019打开。接着点击“项目”,再点击“添加引用”,浏览到Dll文件,保存项目(保存解决方案以便下次可通过文件再次打开)。现在使用vscode打开该项目。

Visual Studio目前(截至2023年)无法在Linux上运行,因此这对于每个人都不可能。 - cabiste

1

我刚看到这个问题,所以想要添加一些有用的链接,供大家通常使用CLI。看起来你仍然需要手动添加一个dll文件...

https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-add-reference

如果您正在构建库并将其作为解决方案的一部分添加,则可以使用CLI在需要时添加引用,请参见以下链接。

https://learn.microsoft.com/en-us/dotnet/core/tutorials/library-with-visual-studio-code?pivots=dotnet-7-0

你也可以自己打包成一个包,但是除非你有自己的源,否则你需要进行一些类似的自定义.csproj更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接