标签: msbuild

MSBuild ProjectReference:private("Copy Local") - 允许的值和行为是什么?

TL; DR是否有任何官方文档详细描述<private>/"复制本地"选项如何与MSBuild一起使用?应该考虑什么价值?


当你添加一个项目引用从一个项目在Visual Studio中的另一个,它会加入<ProjectReference Include=".....csproj">.csproj的MSBuild文件.

当您 Visual Studio中的一个项目文件引用添加到文件系统中的程序集文件时,它将添加<Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ....csprojMSBuild文件.

这两种情况下,Visual Studio的设置Copy Local = True|False,一个子元素<Private>True</Private><Private>False</Private>将增加.

Reference并且ProjectReference似乎在Common MSBuild Project Items下记录:

<ProjectReference>
  Represents a reference to another project.

  Item Name    Description
  -------------------------
   Name         ...
   Project      ...
   Package      ...

<Reference>
  Represents an assembly (managed) reference in …
Run Code Online (Sandbox Code Playgroud)

.net msbuild copy-local visual-studio msbuild-projectreference

59
推荐指数
1
解决办法
2万
查看次数

无法加载文件或程序集'Microsoft.Build.Framework'(VS 2017)

当我尝试运行命令"update-database"时,我得到以下异常:

指定'-Verbose'标志以查看应用于目标数据库的SQL语句.System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.文件名:'Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'

警告:装配绑定日志记录已关闭.要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.注意:程序集绑定失败日志记录会导致一些性能损失.要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog].

无法加载文件或程序集"Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"或其依赖项之一.系统找不到指定的文件

c# migration msbuild visual-studio-2017

59
推荐指数
8
解决办法
3万
查看次数

让TFS将每个项目输出到自己的目录的最佳方法是什么?

我将一个大型代码库放入Team Foundation Server.我希望构建过程能够创建项目的"准备部署"构建.

我们这样做的正常方法是让每个项目的输出都在自己的文件夹中.所以,例如,我们结束了类似的事情

C:\project1\
            assembly1.dll
            assembly2.dll
            project1.exe
            project1.exe.config
C:\project2\
            assembly2.dll
            assembly3.dll
            project2.exe
            project2.exe.config
C:\project3\
            assembly1.dll
            assembly3.dll
            project3.exe
            project3.exe.config
Run Code Online (Sandbox Code Playgroud)

这是我们喜欢的方式.

但是,TFS似乎希望将所有内容都放在同一目录中.

C:\output\
          assembly1.dll
          assembly2.dll
          assembly3.dll
          project1.exe
          project1.exe.config
          project2.exe
          project2.exe.config
          project3.exe
          project3.exe.config
Run Code Online (Sandbox Code Playgroud)

虽然它节省了一些磁盘空间(程序集只有一次),但并不是我们想要的.

指定TFS/MSBuild应该放置输出文件的位置的最佳方法是什么?我是否需要单独编辑sln/csproj文件才能实现此目的,还是可以在TFSBuild.proj文件中执行此操作?(即,在MSBuild特定的文件中)

msbuild tfs

58
推荐指数
5
解决办法
4万
查看次数

在应用程序构建期间自动复制文件以输出

C#项目中的文件有" 复制到输出目录"属性.但是在VC++项目中却没有.我知道,我可以在VC++中使用Build事件并在那里写一些类似的东西

xcopy /y /d %(FullPath) $(OutDir)
Run Code Online (Sandbox Code Playgroud)

有没有办法避免使用CMD(和其他脚本方法)?在这种情况下,msbuild可以帮忙吗?

c++ msbuild visual-studio-2010 visual-c++

58
推荐指数
6
解决办法
3万
查看次数

在编译时检测目标框架版本

我有一些使用扩展方法的代码,但是使用VS2008中的编译器在.NET 2.0下编译.为了促进这一点,我不得不声明ExtensionAttribute:

/// <summary>
/// ExtensionAttribute is required to define extension methods under .NET 2.0
/// </summary>
public sealed class ExtensionAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)

但是,我现在想要包含该类的库也可以在.NET 3.0,3.5和4.0下编译 - 没有'ExtensionAttribute在多个地方定义'警告.

当目标框架版本是.NET 2时,是否有任何编译时指令可用于仅包含ExtensionAttribute?

.net c# msbuild extension-methods visual-studio

57
推荐指数
5
解决办法
3万
查看次数

Visual Studio传递给MSBuild的参数是什么?

当Visual Studio运行构建时,它运行MSBuild来完成大部分工作.如果将.sln文件传递给MSBuild,并使用适当的Configuration和Platform属性,它将构建与Visual Studio类似的解决方案.

msbuild mysolution.sln /p:Configuration=Release /p:Platform="Any CPU"
Run Code Online (Sandbox Code Playgroud)

然而,区别:有时构建将通过MSBuild的错误,而不是通过Visual Studio,反之亦然.

Visual Studio传入MSBuild以影响进程的参数是什么?有没有办法在执行构建时看到它传递的参数?

msbuild visual-studio

57
推荐指数
2
解决办法
4万
查看次数

如何在没有安装Visual Studio的情况下构建.NET 4.6 Framework应用程序?

到目前为止,我可以使用命令行构建.NET 4.5.2

c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild MySolution.sln
Run Code Online (Sandbox Code Playgroud)

我需要在计算机上安装的唯一内容是.NET Framework和Visual Studio 2010 shell.

现在我考虑升级到.NET 4.6.但是我找不到如何在没有Visual Studio的情况下构建解决方案的方法.

我不想安装Visual Studio 2015,因为它对于这个托管的虚拟机来说太大了.我希望一些MSBuild或Microsoft软件包安装就足够了.

msbuild .net-4.6

57
推荐指数
1
解决办法
5万
查看次数

如何在Visual Studio项目输出中显示<Message> msbuild任务?

我试图通过向控制台发送消息来"printf()调试"我的Visual Studio项目文件,如下所示:

<Target Name="BeforeBuild">
  <Message Text="+++++++++++++++++++++++ Justin Dearing ++++++++++++++++++++++++++++++++++++" />
</Target>
Run Code Online (Sandbox Code Playgroud)

这可以从命令行工作:

BeforeBuild:
  +++++++++++++++++++++++ Justin Dearing ++++++++++++++++++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)

但是,消息不会显示在Visual Studio 2010构建输出中.是否有我可以使用的替代msbuild任务,或者Visual Studio中的设置我可以启用这些消息吗?

msbuild visual-studio

56
推荐指数
3
解决办法
2万
查看次数

在构建代理上运行代码分析(FxCop> 10)而不安装Visual Studio

在FxCop 10之后,Microsoft停止为FxCop发布单独的安装程序.在安装Visual Studio 2013/2015/2017之后,官方目前只能运行代码分析(FxCop 12.0/14.0/15.0).但是,我们坚持不在构建代理上安装Visual Studio(安装需要保留在 - 与我们在开发者计算机上获得的内容同步等).

那么我将如何让FxCop 12.0/14.0/15.0在构建代理上工作,最好不要安装其他任何东西?不过,我会接受为源代码控制添加一些二进制文件和msbuild文件.否则:有没有办法只使用Visual Studio 2013/2015/2017安装程序安装FxCop的东西?

注意:我们使用Teamcity作为构建服务器.

答案

由于特定环境和FxCop版本有多个有效答案,我可以自由地将它们链接到此处以便于访问:

.net msbuild continuous-integration fxcop build-server

56
推荐指数
4
解决办法
3万
查看次数

MSbuild是否要求在构建服务器上安装Visual Studio?

我们可以在没有Visual Studio 2012的情况下使用MSBuild吗?

目前,我们有一个构建服务器,我们正在编译和创建其中一个项目的部署副本,它已安装Visual Studio Professional Edition.我们现在正在建立一个新的构建服务器.我们真的需要在新的构建服务器上使用Visual Studio 2012吗?

如果是,那怎么样?我用谷歌搜索,但我找不到答案.

msbuild nant build visual-studio-2010 visual-studio-2012

56
推荐指数
4
解决办法
4万
查看次数