在编译

时间:2017-11-07 23:11:08

标签: compiler-errors nuget visual-studio-2017

我的项目中包含3个Nuget包。当我构建'debug'版本时,dll会被复制到bin \ debug目录中,并且项目会正确编译。

但是,当我尝试构建发布版本时,我找不到'类型或命名空间名称'packagename'。

项目.csproj文件如下:

 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DocumentationFile>bin\Debug\MyProject.XML</DocumentationFile>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <Prefer32Bit>false</Prefer32Bit>
  </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>
    <DocumentationFile>bin\Release\MyProject.XML</DocumentationFile>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    </Reference>
    <Reference Include="Excel, Version=2.1.2.3, Culture=neutral, PublicKeyToken=93517dbe6a4012fa, processorArchitecture=MSIL">
    </Reference>
    <Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
    </Reference>
  </ItemGroup>

我收到所有三个页面的相同错误消息,他们只有我得到的错误与这些不存在相关。没有其他编译错误。

对于这些dll中的每一个,调试版本的路径(属性)是bin \ Debug目录,但我不知道如何设置它。

我不知道如何将这些软件包放入我的bin \ release目录(除了手动复制它们)。有人可以解释我错过了什么,或者我做错了。

1 个答案:

答案 0 :(得分:0)

感谢您的回复。我已经解决了这个问题,并提高了我对这一切是如何工作的理解。

Nuget将获取软件包并将它们放入解决方案目录的packages目录中。它还将以下packages.config文件添加到解决方案目录:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="DocumentFormat.OpenXml" version="2.5" targetFramework="net45" />
  <package id="ExcelDataReader" version="2.1.2.3" targetFramework="net45" />
  <package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
</packages>

.csproj文件中的“HintPath”。编译器使用它,提供程序集文件的源位置,根据需要将其复制到相关bin \ Debug或bin \ Release目录:

 <ItemGroup>
  <Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <HintPath>packages\DocumentFormat.OpenXml.2.5\lib\DocumentFormat.OpenXml.dll</HintPath>
  </Reference>
  <Reference Include="Excel, Version=2.1.2.3, Culture=neutral, PublicKeyToken=93517dbe6a4012fa, processorArchitecture=MSIL">
    <HintPath>packages\ExcelDataReader.2.1.2.3\lib\net45\Excel.dll</HintPath>
  </Reference>
  <Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
    <HintPath>packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
  </Reference>
</ItemGroup>

我的问题是我删除了'HintPath',因为它直接指向了错误,然后没有任何效果。我的bin \ Debug中的程序集,其中构建一个引用错误的程序集文件集的调试版本。上面的代码块现在可以正常工作。