标签: msbuild-projectreference

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万
查看次数

GAC中的程序集不会复制到项目中的输出,该项目引用引用具有CopyLocal = true的GAC程序集的项目

我有一个"Project A",它引用System.Web.Mvc和CopyLocal = TRue.System.Web.Mvc在我的本地机器和构建服务器上都在GAC中.

我还有一个"项目B",在"项目B"System.Web.Mvc的输出中引用"项目A",在构建期间不会复制到该项目.

我怀疑这是因为它在GAC中.这是真的?我可以做些什么来让MSBuild将它复制到输出文件夹吗?

我在这个帖子中读到了Muse VsExtensions的答案,它只讨论了对GAC的直接引用,但我们通过"项目A"间接引用: .NET参考"复制本地"真/假根据内容设置GAC

这篇博文也是相关的:http: //deeperdesign.wordpress.com/2010/02/08/msbuild-assembly-dependencies-and-the-gac/

msbuild gac msbuild-projectreference

14
推荐指数
2
解决办法
3395
查看次数

Visual Studio Community 2017中的条件参考

我正在创建一个多平台应用程序.我有一个多目标共享库(目标.netstandard 2.0和.net 4.5)...请参阅项目文件:

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

当我在Windows上的visual studio 2017中构建项目时,我在输出中有两个目录(netstandard2.0,net45)和相应的dll.构建是成功的.

当我在Mac上的visual studio 2017中构建完全相同的项目(相同的代码)时,我得到了这种性质的错误:

类型'OptionAttribute'存在于'CommandLine.DotNetStandard,Version = 1.0.30'和'CommandLine,Version = 1.9.71.2'中

我通过以下方式有条件地引用了命令行解析器库:

  <!-- CommandLineParser library -->
  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="CommandLine.DotNetStandard">
      <Version>1.0.3</Version>
    </PackageReference>
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net45'">
    <PackageReference Include="CommandLineParser">
      <Version>1.9.71</Version>
    </PackageReference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这适用于Windows,但在Mac上它似乎没有观察到这种情况.这是mac上visual studio的已知错误吗?难道我做错了什么?

msbuild multitargeting nuget-package msbuild-projectreference visual-studio-mac

11
推荐指数
1
解决办法
1779
查看次数

MSBuild中ProjectReference的配置

是否可以在MSBuild中设置ProjectReference的配置?

场景:我有一个构建脚本(Web部署),它具有许多配置,其中唯一的区别与它们的部署方式有关,而不是自己构建.我不愿意为我的解决方案/项目维护配置,这些配置是作为部署过程的一部分构建的,因为我需要这些配置进行部署.我能以任何方式完成这项任务吗

msbuild msbuild-projectreference

8
推荐指数
2
解决办法
1666
查看次数

WiX属性RefProjectOutputGroups RefTargetDir

在WiX项目(*.wixproj)中引用项目时,我经常看到代码片段

<ItemGroup>
  <ProjectReference Include="..\Foo.Bar\Foo.Bar.csproj">
    <Name>Foo.Bar</Name>
    <Project>{0bd367ce-5072-4161-8447-ff4deed97bd4}</Project>
    <Private>True</Private>
    <DoNotHarvest>True</DoNotHarvest>
    <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
    <RefTargetDir>INSTALLLOCATION</RefTargetDir>
  </ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释什么属性DoNotHarvest,RefProjectOutputGroups以及RefTargetDir是什么意思?或者指向一些文档?我找不到任何解释这些属性含义的内容(包括WiX文档).

wix msbuild-projectreference

8
推荐指数
1
解决办法
2231
查看次数

MSBuild - 尝试构建项目引用时的竞争条件

我在尝试使用 MSBuild 构建时遇到一个奇怪的问题。

我正在使用 MSBuild 构建一个解决方案文件/m(并行构建)并BuildProjectReferences设置为true.

假设我在 .sln 文件中拥有A.vcxproj和 ,B.vcxproj其中 B 具有对 A 的项目引用。

发生的情况是:A project首先开始构建,在编译过程中,B project开始在另一个进程中构建(因为并行构建),并且它将调用构建 A。

现在这会导致竞争条件,因为我们有两个进程试图构建相同的进程project A,并且我会看到访问问题。

理想情况下,如果 A 尚未完成构建,MSBuild 不应调用构建 B,或者如果它调用了 B,则检测到 A 仍在构建并等待其完成。

这一切都没有发生。另外,这种情况仅在 MSBuild 中发生 - 如果我尝试从 VS2015 IDE 构建解决方案文件,则不会发生这种情况。

知道为什么 MSBuild 会这样吗?

msbuild project-reference race-condition parallel-builds msbuild-projectreference

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