【问题标题】:Which one is correct approach for assembly reference in csproj file?哪一种是 csproj 文件中程序集引用的正确方法?
【发布时间】:2012-07-11 04:50:24
【问题描述】:

在我的一个 MSI 安装程序中,我正在以编程方式更新程序集和项目参考相对路径。我的应用程序文件夹中的所有参考程序集。

我尝试实现路径相对路径和绝对路径。两者都工作正常。

相对路径

 <Reference Include="log4net">
      <HintPath>..\..\..\..\log4net.dll</HintPath>
 </Reference>

绝对路径

 <Reference Include="log4net">
          <HintPath>C:\Program files\Myapplication\log4net.dll</HintPath>
 </Reference>

当我从 Reference Assemblies Path 或 GAC 文件中获取程序集的引用时,我只看到了绝对路径引用。

C:\Program Files (x86)\Reference Assemblies

 <Reference Include="System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll</HintPath>
    </Reference>

将路径更新为.Csproj 文件的正确方法是哪一种?

【问题讨论】:

    标签: c#-4.0 csproj


    【解决方案1】:

    正如您所说:两者都可以正常工作。

    在某些极端情况下,实际上在 .csproj 文件中使用相对路径还是绝对路径很重要:

    • 当您计划移动您的 .csproj 文件时。引用的程序集是否也会移动,然后使用相对路径,否则使用绝对路径。
    • 当您的文件夹结构中有极端嵌套时,相对路径可能会超过 260 个字符的路径名限制。这是因为完整路径是通过简单地连接项目目录路径和相对路径(包括所有..\)在内部构建的。然后,连接的路径可能会超过上述characters-in-path-name-limit,而绝对路径则不会。

    【讨论】:

    • 看起来 Visual Studio 接受了一个环境变量,所以如果你想要绝对路径,你可以说&lt;HintPath&gt;$(ProgramFiles)\Myapplication\log4net.dll&lt;/HintPath&gt;。优点是,如果文件夹名称是本地化的(在非英语版本的 Windows 中)或确实包含 (x86) 后缀,它应该仍然可以工作。但是,我不知道除了 Visual Studio 之外的其他工具是否可以在提示路径中使用环境变量。
    猜你喜欢
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2023-03-13
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多