【问题标题】:VS2010 - Using <Import /> to share properties between setup projects?VS2010 - 使用 <Import /> 在安装项目之间共享属性?
【发布时间】:2012-09-01 17:57:55
【问题描述】:

为什么&lt;Import /&gt;这个文件不起作用,当我用仅复制粘贴三个属性替换语句时它起作用?

../../Setup.Version.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <InstallerMajorVersion>7</InstallerMajorVersion>
        <InstallerMinorVersion>7</InstallerMinorVersion>
        <InstallerBuildNumber>7</InstallerBuildNumber>
    </PropertyGroup>
</Project>

作品:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <InstallerMajorVersion>7</InstallerMajorVersion>
        <InstallerMinorVersion>7</InstallerMinorVersion>
        <InstallerBuildNumber>7</InstallerBuildNumber>
        <OutputName>asdf-$(InstallerMajorVersion).$(InstallerMinorVersion).$(InstallerBuildNumber)</OutputName>
        <OutputType>Package</OutputType>

不起作用:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="../../Setup.Version.proj" />
    <PropertyGroup>
        <OutputName>asdf-$(InstallerMajorVersion).$(InstallerMinorVersion).$(InstallerBuildNumber)</OutputName>
        <OutputType>Package</OutputType>

这里的变量只是评估为空字符串... :( 我确定导入项目的路径是正确的。


所以当我从命令行运行 msbuild 时它似乎工作正常,但当我在 Visual Studio 中构建项目时却不行。为什么呢?

【问题讨论】:

  • 应该没问题 - 尝试正确的斜杠“..\..\Se...”,看看 MSBuild 是否会产生任何类型的警告。
  • 不知道。注意:您的问题似乎缺少“相同错误”的实际消息。
  • 这只是与未设置变量有关的错误。如果我粘贴它们,错误就会消失并且可以正常工作。

标签: visual-studio-2010 visual-studio msbuild wix


【解决方案1】:

我尝试过重现,一切正常:

importme.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <InstallerMajorVersion>7</InstallerMajorVersion>
        <InstallerMinorVersion>7</InstallerMinorVersion>
        <InstallerBuildNumber>7</InstallerBuildNumber>
    </PropertyGroup>
</Project>

ma​​in.proj

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="importme.proj" />
    <PropertyGroup>
        <OutputName>asdf-$(InstallerMajorVersion).$(InstallerMinorVersion).$(InstallerBuildNumber)</OutputName>
        <OutputType>Package</OutputType>
    </PropertyGroup>
    <Target Name="Build">
        <Message Text="$(OutputName)"/>
    </Target>
</Project>

输出

Microsoft (R) Build Engine version 4.0.30319.17626
[Microsoft .NET Framework, version 4.0.30319.17626]
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 10.09.2012 12:35:12.
Project "d:\temp\SO\main.proj" on node 1 (default targets).
Build:
  asdf-7.7.7
Done Building Project "d:\temp\SO\main.proj" (default targets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.55

运行使用

msbuild main.proj

更新:您需要重新加载项目以更新包含的文件或使用workaround

【讨论】:

  • 啊哈!!它也适用于我的命令行,但不适用于 Visual Studio!为什么在这个世界上?
  • 对配置|平台等元素有条件吗?可能它们在控制台和 VS 之间有所不同?
  • 在哪个元素上?我粘贴的正是它在这里的样子。
  • 尝试将&lt;PropertyGroup&gt;放入&lt;Target Name="BeforeBuild"&gt;
  • 对不起,什么?只是一个空的 ,还是?我不明白:P
【解决方案2】:

它不起作用的原因是 Visual Studio 已经缓存了包含的文件,因此我对其所做的任何更改都不会生效,直到我重新加载解决方案或重新启动 Visual Studio。这似乎是 VS 2010 的限制。重新加载 VS 2010 后,一切正常。

【讨论】:

    【解决方案3】:

    Import 元素仅在Project 元素下有效。但是,代码似乎想要将值导入&lt;ProjectGroup&gt; 元素。尝试在 Setup.Version.proj 中将这些值声明为变量,并在您的主 MSBuild 文件中引用它们,例如:

    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Import Project="../../Setup.Version.proj" /> <!-- Variables declared in here -->
        <PropertyGroup>
            <InstallerMajorVersion>$(MyInstallerMajorVersion)</InstallerMajorVersion>
            <InstallerMinorVersion>$(MyInstallerMinorVersion)</InstallerMinorVersion>
            <InstallerBuildNumber>$(MyInstallerBuildNumber)</InstallerBuildNumber>
            <OutputName>asdf-$(InstallerMajorVersion).$(InstallerMinorVersion).$(InstallerBuildNumber)</OutputName>
            <OutputType>Package</OutputType>
    

    【讨论】:

    • 该死,它们还没有被定义。我在网上也找不到任何好的例子......
    • @arex1337 你能发布你的 Setup.Version.proj 文件的内容吗?
    • @arex1337 嗯。我唯一能想到的可能是操作顺序(msdn.microsoft.com/en-us/library/ms171464.aspx)。如果我想到其他任何事情,我会告诉你的。
    • 在 Setup.Version.proj 中定义 &lt;InstallerMajorVersion&gt;7&lt;/InstallerMajorVersion&gt; 但是在主项目文件中引用 $(MyInstallerMajorVersion) 尝试修复 Setup.Version.proj 看看会发生什么。
    • 我想你可能把我的问题的答案之一弄错了。我没有引用 $(MyInstallerMajorVersion)。我也尝试了 akton 的建议,但没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多