我有一个视觉工作室的解决方案。 我在解决方案中有许多项目。 有一个主要项目作为启动,并使用其他项目。 有一个项目叫“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属性。
其他回答
这是对nvirth示例的轻微调整
internal class DummyClass
{
private static void Dummy()
{
Noop(typeof(AbcDll.AnyClass));
}
private static void Noop(Type _) { }
}
如果右击引用的程序集,将看到名为Copy Local的属性。如果“本地复制”设置为true,则程序集应该包含在bin中。然而,Visual studio有一个问题,有时它不包括在bin文件夹中引用的dll…这是对我有效的变通方法:
是的,您需要将“本地复制”设置为true。但是,我非常确定您还需要从主项目引用该程序集,并将Copy Local设置为true—它不仅仅是从依赖的程序集复制。
您可以通过单击References下的程序集并按F4来获得Copy Local属性。
在我的例子中,这是最愚蠢的事情,由TFS/VS的默认行为引起的,我不同意。
由于添加dll作为主项目的引用没有工作,我决定将其添加为“现有项”,复制本地=始终。即使那时文件也不在那里。
事实证明,即使文件出现在VS解决方案中,并且在本地和服务器上编译了所有内容,VS/TFS并没有将该文件添加到源代码控制中。它根本不包括在“未决更改”中。我不得不手动打开源代码管理资源管理器,并明确地单击“将项目添加到文件夹”图标。
愚蠢,因为我已经在vs中开发了15年,我以前遇到过这种情况,我只是不记得了,不知为何我错过了它,因为所有东西仍然编译,因为文件是常规引用,但被添加为Existing Item的文件没有被复制,因为它不存在于源代码控制服务器上。
我希望这能节省一些时间,因为我失去了2天的生命。
当您将其设置为程序集属性时,它看起来很流畅
[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))]