Msbuild 什么';这是MSDeploy NullReferenceException吗?

Msbuild 什么';这是MSDeploy NullReferenceException吗?,msbuild,msdeploy,web-site-project,Msbuild,Msdeploy,Web Site Project,当我从构建脚本运行MSDeploy时,我得到这个NullReferenceException。有趣的是,项目部署了。这让我快发疯了。注意:这是一个网站项目,不是一个web应用程序项目 我在构建目标文件中使用此选项: <ItemGroup> <DeploySource Include="DirPath"> <Path>C:\TFS\MySiteBranch\PrecompiledWeb\Source<

当我从构建脚本运行MSDeploy时,我得到这个NullReferenceException。有趣的是,项目部署了。这让我快发疯了。注意:这是一个网站项目,不是一个web应用程序项目

我在构建目标文件中使用此选项:

    <ItemGroup>     
        <DeploySource Include="DirPath">
            <Path>C:\TFS\MySiteBranch\PrecompiledWeb\Source</Path>
            <ComputerName>myComputer</ComputerName>
            <UserName>anAdminAccount</UserName>
            <Password>itsPassword</Password>
        </DeploySource>
    </ItemGroup>

    <ItemGroup>
        <TestDeployDest Include="DirPath">
            <Path>C:\TFS_Build\POC\Test</Path>
            <ComputerName>myComputer</ComputerName>
            <UserName>anAdminAccount</UserName>
            <Password>itsPassword</Password>
        </TestDeployDest>
    </ItemGroup>    

    <Target name="Deploy">

        <PropertyGroup>
            <WhatIf Condition="'$(WhatIf)'==''">false</WhatIf>
            <MSDeployPath Condition="'$(MSDeployPath)'==''">C:\Program Files\IIS\Microsoft Web Deploy V2</MSDeployPath>
        </PropertyGroup>

        <MSDeploy Condition="'@(TestDeployDest)'!=''"
            Whatif="$(WhatIf)"
            Verb="sync"
            Source="@(DeploySource)"
            Destination="@(TestDeployDest)"
            ExePath="$(MSDeployPath)"
        />
</target>

有什么想法我可以试试吗?

我刚刚遇到了同样的事情。我无法找出问题所在,但我可以通过使用VSMSDeploy而不是MSDeploy来解决它。这两个任务都在同一个DLL中,在Microsoft.Web.Publishing.targets中有使用它的示例。

请尝试在MSDeploy元素上使用ContinueOnError=“true”,如下代码所示:

<ItemGroup>     
        <DeploySource Include="DirPath">
            <Path>C:\TFS\MySiteBranch\PrecompiledWeb\Source</Path>
            <ComputerName>myComputer</ComputerName>
            <UserName>anAdminAccount</UserName>
            <Password>itsPassword</Password>
        </DeploySource>
    </ItemGroup>

    <ItemGroup>
        <TestDeployDest Include="DirPath">
            <Path>C:\TFS_Build\POC\Test</Path>
            <ComputerName>myComputer</ComputerName>
            <UserName>anAdminAccount</UserName>
            <Password>itsPassword</Password>
        </TestDeployDest>
    </ItemGroup>    

    <Target name="Deploy">

        <PropertyGroup>
            <WhatIf Condition="'$(WhatIf)'==''">false</WhatIf>
            <MSDeployPath Condition="'$(MSDeployPath)'==''">C:\Program Files\IIS\Microsoft Web Deploy V2</MSDeployPath>
        </PropertyGroup>

        <MSDeploy ContinueOnError="true" Condition="'@(TestDeployDest)'!=''"
            Whatif="$(WhatIf)"
            Verb="sync"
            Source="@(DeploySource)"
            Destination="@(TestDeployDest)"
            ExePath="$(MSDeployPath)"
        />
</target>

C:\TFS\MySiteBranch\PrecompiledWeb\Source
我的计算机
管理计数
密码
C:\TFS\u Build\POC\Test
我的计算机
管理计数
密码
假的
C:\Program Files\IIS\Microsoft Web Deploy V2

我也有同样的问题;并且能够使用此处描述的修复程序解决此问题:


对我来说,使用VSMSDeploy任务不是一个选项,因为我们运行x64服务器和web应用程序。Visual Studio仅运行x86版本的msbuild和msdeploy,因此VSMSDeploy仅适用于x86服务器和站点。我正在使用appHostConfig提供程序存储IIS配置,appHostConfig无法将x64站点同步到msdeploy的x86实例。

我能够使用部署。

可能是由于项目中存在较深的层次结构。您使用的是什么版本的Visual Studio?我使用的是VS 2010和TFS 2010。我还必须把我自己的项目文件放在一起,因为这是一个网站,不是本机使用的。我已经验证了项目文件,所有目标文件都在运行。
<ItemGroup>     
        <DeploySource Include="DirPath">
            <Path>C:\TFS\MySiteBranch\PrecompiledWeb\Source</Path>
            <ComputerName>myComputer</ComputerName>
            <UserName>anAdminAccount</UserName>
            <Password>itsPassword</Password>
        </DeploySource>
    </ItemGroup>

    <ItemGroup>
        <TestDeployDest Include="DirPath">
            <Path>C:\TFS_Build\POC\Test</Path>
            <ComputerName>myComputer</ComputerName>
            <UserName>anAdminAccount</UserName>
            <Password>itsPassword</Password>
        </TestDeployDest>
    </ItemGroup>    

    <Target name="Deploy">

        <PropertyGroup>
            <WhatIf Condition="'$(WhatIf)'==''">false</WhatIf>
            <MSDeployPath Condition="'$(MSDeployPath)'==''">C:\Program Files\IIS\Microsoft Web Deploy V2</MSDeployPath>
        </PropertyGroup>

        <MSDeploy ContinueOnError="true" Condition="'@(TestDeployDest)'!=''"
            Whatif="$(WhatIf)"
            Verb="sync"
            Source="@(DeploySource)"
            Destination="@(TestDeployDest)"
            ExePath="$(MSDeployPath)"
        />
</target>