4

我的解决方案中有多个项目。每个项目都引用其他项目。dll 非常大,我不希望它们包含在引用它的每个项目的 bin 中。

我有哪些选择?理想情况下,我想将它们放在一个位置并引用它,而无需将它们包含在每个项目的 bin 文件夹中。我能想到的唯一地点是GAC。关于您如何解决这个问题有什么想法/建议吗?

是否可以使用探测路径?之前有人用过这个/指向我的教程吗?

我试过探测路径,运行应用程序时出错,这是不是设置不正确?我已将我希望从此路径加载的 dll 放在 C:\Projects\myProject\bin 文件夹中。并在参考文献中将 copy 设置为 false

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <probing privatePath="C:\Projects\myProject\bin"/>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

谢谢

4

2 回答 2

1

CopyLocal我猜你更喜欢在 Visual Studio 中引用程序集时关闭

步骤可能是:

  1. 打开Solution Explorer
  2. 右键单击参考项(项目或程序集)
  3. Properties在上下文菜单中选择。
  4. 设置CopyLocalFalse(默认为真)

然后引用将不会被复制到您的project\bin\debug或等。

更新

您仍然需要将您的依赖项复制到同一个文件夹、GAC 或探测路径以运行您的应用程序。

这就是.Net 解析程序集引用的方式。

您可以参考运行时如何定位程序集。

更新 1

MSDN 指定程序集的位置

使用<probing>元素 运行时通过探测定位没有代码库的程序集。有关探测的更多信息,请参阅运行时如何定位程序集。您可以使用应用程序配置文件中的元素来指定运行时在定位程序集时应搜索的子目录。以下示例显示如何指定运行时应搜索的目录。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <probing privatePath="bin;bin2\subbin;bin3"/>
    </assemblyBinding>
  </runtime>
</configuration>

privatePath属性包含运行时应搜索程序集的目录。如果应用程序位于C:\Program Files\MyApp,则运行时将查找未在 、 和 中指定代码库的C:\Program Files\MyApp\Bin程序C:\Program Files\MyApp\Bin2\SubbinC:\Program Files\MyApp\Bin3。中指定的目录privatePath必须是应用程序基目录的子目录。

于 2013-05-27T00:40:50.473 回答
1

您只能将引用的库添加到启动项目的输出文件夹中:

1)右键单击启动项目,“ Add”,“ Existing Item”。或者[Shift]+[Alt]+[A]在 VS2010 中与默认值组合。

2)将类型选择器更改为“ All files (*)”,找到并选择您的库。

3) 将“添加”选择器更改为“ Add As Link”并按下它。

4) 选择刚刚添加到项目中的链接,并在属性窗口中将“ Copy to Output Directory”设置为“ Copy always”。现在,每次构建解决方案时,都会将该库复制到启动项目的输出文件夹中。

5) 如果您想限制将此 dll 复制到使用它的项目的输出中,请右键单击该项目中的引用,然后在“属性”窗口中将“ Copy Local”设置为 false。

影响:

您引用的 dll 将出现的唯一位置将是您的启动项目的输出目录。

缺点:

如果您要更改启动项目,则需要再次添加所有链接。

解决方案资源管理器中的启动项目目录变得混乱。

于 2013-05-20T14:35:58.620 回答