我有一个视觉工作室的解决方案。 我在解决方案中有许多项目。 有一个主要项目作为启动,并使用其他项目。 有一个项目叫“ProjectX”。其参考资料添加到主项目中。 ProjectX引用了另一个. net dll(例如abc.dll),它不是解决方案的一部分。
现在这个abc.dll应该被复制到主项目的bin/debug文件夹中,但它没有被复制到那里。为什么没有被复制,有什么已知的原因吗?
我有一个视觉工作室的解决方案。 我在解决方案中有许多项目。 有一个主要项目作为启动,并使用其他项目。 有一个项目叫“ProjectX”。其参考资料添加到主项目中。 ProjectX引用了另一个. net dll(例如abc.dll),它不是解决方案的一部分。
现在这个abc.dll应该被复制到主项目的bin/debug文件夹中,但它没有被复制到那里。为什么没有被复制,有什么已知的原因吗?
当前回答
是的,您需要将“本地复制”设置为true。但是,我非常确定您还需要从主项目引用该程序集,并将Copy Local设置为true—它不仅仅是从依赖的程序集复制。
您可以通过单击References下的程序集并按F4来获得Copy Local属性。
其他回答
当您将其设置为程序集属性时,它看起来很流畅
[AttributeUsage(AttributeTargets.Assembly)]
public class ForceAssemblyReference: Attribute
{
public ForceAssemblyReference(Type forcedType)
{
//not sure if these two lines are required since
//the type is passed to constructor as parameter,
//thus effectively being used
Action<Type> noop = _ => { };
noop(forcedType);
}
}
用法如下:
[assembly: ForceAssemblyReference(typeof(AbcDll.AnyClass))]
只是佐格领主回答的旁注。
我以这种方式添加了虚拟引用,它在调试模式下工作:
public class DummyClass
{
private static void Dummy()
{
var dummy = typeof(AbcDll.AnyClass);
}
}
但是在发布模式下,依赖的dll仍然没有被复制。 然而,这奏效了:
public class DummyClass
{
private static void Dummy()
{
Action<Type> noop = _ => {};
var dummy = typeof(AbcDll.AnyClass);
noop(dummy);
}
}
这个信息其实花了我好几个小时才弄明白,所以我想分享一下。
我有一个类似的问题,其中一个DLL我已经包括在项目作为内容和“复制始终”设置,没有被复制到bin文件夹。我通过在app.config中添加一个dependentAssembly引用来解决这个问题。
您可以将主项目和ProjectX的构建输出路径设置为相同的文件夹,然后您可以在该文件夹中获得所需的所有dll。
除了上述常见的解决方案,我还有一个多项目解决方案要发布。显然,一些文件针对不同的框架。
所以我的解决方案:属性>特定版本(假)