MSBuild:OutputPath目录为空

时间:2011-05-11 07:37:49

标签: deployment msbuild

我想部署我的ASP.NET MVC站点并拥有以下脚本。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\MyProjName\MyProjName.csproj"/>
  <PropertyGroup>
    <NewInstallDir>C:\DeployFolder\</NewInstallDir>
    <BinDir>$(NewInstallDir)bin\</BinDir>
  </PropertyGroup>
  <Target Name="Build">
    <MSBuild Projects="..\MySlnName.sln"
        Properties="Configuration=Release;Platform=Any CPU;OutputPath=$(BinDir)" />
    <Copy SourceFiles="@(Content->'..\MyProjName\%(RelativeDir)%(FileName)%(Extension)')"
        DestinationFiles="@(Content->'$(NewInstallDir)%(RelativeDir)%(FileName)%(Extension)')" />
    <Copy SourceFiles="@(None->'..\MyProjName\%(RelativeDir)%(FileName)%(Extension)')"
        DestinationFiles="@(None->'$(NewInstallDir)%(RelativeDir)%(FileName)%(Extension)')" />
    <MakeDir Directories="@(Folder->'$(NewInstallDir)%(RelativeDir)')" />
  </Target>
</Project>

主要想法。

我将二进制文件复制到C:\ DeployFolder(从源代码中获取文件夹的结构)。我将我的dll构建到C:\ DeployFolder \ Bin(我在sources文件夹中没有这个文件夹,所以我需要单独复制它)。

我运行我的脚本 - 所有工作而不是复制DLL到OutputPath。相同的脚本适用于其他asp.net mvc项目。我不知道在这种情况下有什么问题。

我通过解决方法完成了这个问题,但我想知道这个脚本有什么问题。

1 个答案:

答案 0 :(得分:5)

我要尝试的第一件事是用$(OutDir)替换已弃用的$(OutputPath)。从我看到这个错误时起,9次中有9次是由于所请求的平台/配置与实际定义的特定项目之间的不匹配。注意跟踪解决方案文件首选的“任何CPU”(带空格)与$(平台)项目文件中实际使用的“AnyCPU”之间的差异。某些项目向导仅设置“x86”平台或以其他方式省略“AnyCPU”,这可能导致OutputPath为空。

除此之外,导入项目文件然后构建解决方案(假定包含同一个项目“)的方法有点偏离中心。考虑通过导入在项目文件本身中进行所需的部署更改。您可以在正确的位置连接到现有的构建目标,也可以添加其他目标。