我有一个visual studio解决方案.我在解决方案中有很多项目.有一个主要项目作为启动并使用其他项目.有一个项目说"ProjectX".它的参考被添加到主项目中.ProjectX引用了另一个不是解决方案的.NET dll(例如abc.dll).
现在这个abc.dll应该被复制到主项目的bin/debug文件夹中,但它不会被复制到那里.为什么不被复制,任何已知的原因?
我前几天在项目文件中看到了这个:
<ProjectReference Include="Foo\Bar\Baz.csproj">
<Project>{A GUID HERE}</Project>
<Name>Baz</Name>
<Private>False</Private> <!-- ??? -->
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)
a中的每个节点ProjectReference似乎都是自解释的(引用的项目文件,GUID,要在解决方案资源管理器中显示的名称,以及当前项目是否应该链接到引用的项目)Private,并且" 公共MSBuild项目项"页面没有t记录这个值.(有一个Private文件化的设置Reference,而不是ProjectReference-但它有Never,Always和PreserveNewest设置,而不是真假)
这个设置有什么作用?
任务是形成Visual Studio 2010项目,以便在任何构建或发布期间将某些foo.exe实用程序复制到output(bin)目录中.
早期我在.csproj(MSBuild文件)中创建了PostBuildEvent任务:
<PropertyGroup>
<PostBuildEvent>
Copy "$(SolutionDir)Tools\foo.exe" "$(ProjectDir)$(OutDir)foo.exe"
</PostBuildEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
但这不是普遍的.发布期间(Visual Studio 2010)foo.exe出现在bin目录中,但未复制到输出发布目录.也许我做的一切都完全错了,并且有一些标准机制可以将项目中的文件包含在以后,在构建或发布期间,复制到bin?
如何在Visual Studio中设置项目以复制项目引用之一所依赖的第三方DLL?
我有一个主应用程序项目和一个类库DLL.主应用程序引用类库DLL,DLL本身引用一些第三方DLL.当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但它不会复制第三方DLL.
我不想从主应用程序项目添加对第三方DLL的引用,因为主应用程序不使用它们,它们仅由类库使用.
我们的Web应用程序项目中引用了几个外部DLL文件.我们有一个用于在托管服务器上安装的部署项目.当我们使用.NET 3.5和Visual Studio 2008时,DLL文件被复制到bin文件夹.由于我们已经升级到.NET 4和Visual Studio 2010,因此不再发生这种情况,并且由于无法找到引用,因此我们收到服务器错误.
CopyLocal设置为true,我在web.config中找不到任何内容,表明这是在其他地方设置的.
项目A引用项目B,项目B引用外部DDL(使用NuGet恢复).DLL应该被复制到 Project A的bin文件夹(以及 Project B的DLL):

在我的例子中,当运行项目A时,我得到以下异常抛出:
无法加载文件或程序集'PostSharp,Version = 3.2.18.0,Culture = neutral,PublicKeyToken = b13fd38b8f9c99d7'或其依赖项之一.该系统找不到指定的文件.
DLL未被复制到项目A的bin中.来自Project B的所有其他外部引用都被正确复制,这对我来说很困惑.
Copy Local对于所涉及的所有引用,都设置为true.例:

我该怎么做呢?
注意:使用Visual Studio 2013.
假设我们有一个具有以下结构的解决方案:
编译Project.UI时,VS非常聪明,可以将Project.DAL.dll复制到输出目录,但是它不够聪明,我想要将Oracle.DataAccess复制到输出目录以及分发给客户端.
任何人都可以解释为什么会这样吗?是因为它在GAC中看到Oracle.DataAccess并假设客户端也会在GAC中拥有它吗?
这并不是什么大不了的事,但每次添加新的程序集引用时都有点烦人,我必须记住将其设置为复制本地并添加项目以在我的构建脚本中复制它.
我有一个自定义的msbuild任务,它生成一些输出文件到ProjectA的输出目录($(TargetDir)).当前代码是这样的:
<MyCustomTask ...>
<Output TaskParameter="OutputFiles" ItemName="FileWrites"/>
</MyCustomTask>
Run Code Online (Sandbox Code Playgroud)
ProjectB正在引用ProjectA,但问题是在构建ProjectB时,MyCustomTask生成的文件不会复制到ProjectB的输出目录中.
我们如何使用MSBuild将动态生成的附加文件作为项目依赖项的一部分进行复制?
我正在使用visual studio 2013和Fluent Validation 5.6.2
我看到在bin文件夹中构建之后,它会复制所有特定的文化FluentValidation.resources.dll,这些文化似乎是在.nuspec文件中提到的
> <file src="lib\NET35\de\FluentValidation.resources.dll"
> target="lib\NET35\de\FluentValidation.resources.dll" />
> <file src="lib\NET35\es\FluentValidation.resources.dll" target="lib\NET35\es\FluentValidation.resources.dll" />
> <file src="lib\NET35\fr\FluentValidation.resources.dll" target="lib\NET35\fr\FluentValidation.resources.dll" />
> <file src="lib\NET35\it\FluentValidation.resources.dll" target="lib\NET35\it\FluentValidation.resources.dll" />
> <file src="lib\NET35\nl\FluentValidation.resources.dll" target="lib\NET35\nl\FluentValidation.resources.dll" />
> <file src="lib\NET35\pt\FluentValidation.resources.dll" target="lib\NET35\pt\FluentValidation.resources.dll" />
> <file src="lib\NET35\sv\FluentValidation.resources.dll" target="lib\NET35\sv\FluentValidation.resources.dll" />
Run Code Online (Sandbox Code Playgroud)
但我不需要这些bin文件夹,因为项目不支持任何特定于文化的消息.
那么我怎么能告诉vs-build忽略这些特定文化的dll呢?
当Teamcity运行启动自托管Web应用程序的集成测试时,测试将失败并显示错误:
System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener
Run Code Online (Sandbox Code Playgroud)
抛出此错误的代码是:
var webApp = WebApp.Start<Startup>("http://*:52203/")
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio(使用Resharper测试运行器)执行测试时运行正常.Teamcity配置为使用JetBrains.BuildServer.NUnitLauncher.exe可执行文件来运行测试.
我看到很多关于这个错误的帖子与Microsoft.Owin.Host.HttpListener.dllbin 有关,因为bin\debug或bin\release文件夹中没有.我可以确认此文件(以及随附的.xml文件)都存在于TeamCity buildAgent使用的bin\release文件夹中.没有bin\debug文件夹.